Mam 3 pliki. Pierwszy utworzyłam na początku, bez WPF, skrypt działał, ale okazało się, że potrzebuję okienka z wyborem wartości dla 2 zmiennych. Dodałam więc WPF, w nim dwa comboboxy. Do jednego z nich podpięłam listę, która ma zawsze takie same stringi, więc utworzyłam ją w xaml.cs tego okna WPF. To mi działa, lista się wyświetla, skrypt pobiera zaznaczoną wartość i działa dalej na podstawie tego wyboru. Ale druga lista jest zależna od przypadku, na którym pracuje skrypt, może mieć różną ilość elementów i o różnej nazwie. Utworzyłam ją wcześniej w tym pierwszym pliku, sprawdziłam, że zawiera odpowiednie elementy. A teraz mój problem wygląda tak, że nie umiem tej listy podpiąć pod combobox. Plik xaml.cs nie widzi listy z pliku .cs. Jak to rozwiązać?
plik: AutoProstata.cs
{
public class Script
{
public Script()
{
}
public StructureSet ss;
[MethodImpl(MethodImplOptions.NoInlining)]
public void Execute(ScriptContext context/*, Window window, ScriptEnvironment environment*/)
{
Patient patient = context.Patient;
patient.BeginModifications();
ss = context.StructureSet;
PlanSetup planSetup = context.PlanSetup;
//lista ktora chce umiescic w combobox
List<string> listakursow = new List<string>();
foreach (Course c in patient.Courses)
{
if (c.CanAddPlanSetup(ss))
{
listakursow.Add(c.Name);
}
}
var mainWindow = new AutoProstata.AutoPlan_WyborOpcji();
mainWindow.ShowDialog();
//tutaj chce pobrac string z nazwa z combobox
string C_Auto.Id = wybranykurs;
plik AutoPlan_WyborOpcji.xaml
<Window x:Name="AutoPlanWyborOpcji" x:Class="AutoProstata.AutoPlan_WyborOpcji"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AutoProstata"
mc:Ignorable="d"
Title="AutoPlan Wybor Parametrow" Height="320" Width="400"
WindowStartupLocation="CenterScreen" MinWidth="350" MinHeight="299" FontFamily="Tahoma" FontSize="14" WindowStyle="ThreeDBorderWindow" FontWeight="Bold">
<Border Padding="10">
<StackPanel>
<TextBox Padding="3" Text=" Wybierz kurs sposrod aktywnych kursow:"
Margin="5,5,5,10" />
<ComboBox x:Name="AktywneKursy"
HorizontalAlignment="Left" Margin="5,0,5,5
" Width="250" Height="23"
Loaded="AktywneKursy_Loaded"
DropDownClosed="AktywneKursy_DropDownClosed" />
oraz plik AutoPlan_WyborOpcji.xaml.cs
namespace AutoProstata
{
/// <summary>
/// Interaction logic for AutoPlan_WyborOpcji.xaml
/// </summary>
public partial class AutoPlan_WyborOpcji : Window
{
public string wybranyaparat;
public string wybranykurs;
public AutoPlan_WyborOpcji()
{
InitializeComponent();
}
private void AktywneKursy_Loaded(object sender, RoutedEventArgs e)
{
////Dodac liste
var comboBox = sender as ComboBox;
//ten fragment jest problemem, tu chce umiescic liste z pierwszego pliku:
comboBox.ItemsSource = listakursow;
}
private void AktywneKursy_DropDownClosed(object sender, EventArgs e)
{
var comboBox = sender as ComboBox;
wybranykurs = comboBox.Text;
}
Takie powiedzmy najprostsze rozwiązanie (aczkolwiek niekoniecznie najlepsze):
Dodaj sobie w klasie AutoPlan_WyborOpcji właściwość z listą kursów:
public List<string> Kursy;
W AutoProstata, gdzie uruchamiasz ten dialog, przepisz te opcje:
var mainWindow = new AutoProstata.AutoPlan_WyborOpcji();
mainWindow.Kursy = listakursow;
mainWindow.ShowDialog();
W zdarzeniu Loaded:
comboBox.ItemsSource = Kursy;
Alternatywnie zamiast właściwości możesz też wykorzystać do tego konstruktor AutoPlan_WyborOpcji, aby wymagał listy stringów, którą potem wrzucisz gdzie ci trzeba.
Cnth napisał(a):
Mam 3 pliki. Pierwszy utworzyłam na początku, bez WPF, skrypt działał, ale okazało się, że potrzebuję okienka z wyborem wartości dla 2 zmiennych. Dodałam więc WPF, w nim dwa comboboxy. Do jednego z nich podpięłam listę, która ma zawsze takie same stringi, więc utworzyłam ją w xaml.cs tego okna WPF. To mi działa, lista się wyświetla, skrypt pobiera zaznaczoną wartość i działa dalej na podstawie tego wyboru. Ale druga lista jest zależna od przypadku, na którym pracuje skrypt, może mieć różną ilość elementów i o różnej nazwie. Utworzyłam ją wcześniej w tym pierwszym pliku, sprawdziłam, że zawiera odpowiednie elementy. A teraz mój problem wygląda tak, że nie umiem tej listy podpiąć pod combobox. Plik xaml.cs nie widzi listy z pliku .cs. Jak to rozwiązać?
Dziel i rządź.
Za Chiny ludowe nie rozumiem (i Ty też nie rozumiesz) z czym masz błąd.
Z plikiem? z GUI? z listą?
Z jedzeniem zupy widelcem, czyli niewłaściwymi strukturami danych do problemu?
Słownictwo w tym pytaniu leży i kwiczy
Ktos napisał(a):
Takie powiedzmy najprostsze rozwiązanie (aczkolwiek niekoniecznie najlepsze):
Dodaj sobie w klasie AutoPlan_WyborOpcji właściwość z listą kursów:
public List<string> Kursy;
W AutoProstata, gdzie uruchamiasz ten dialog, przepisz te opcje:
var mainWindow = new AutoProstata.AutoPlan_WyborOpcji(); mainWindow.Kursy = listakursow; mainWindow.ShowDialog();
W zdarzeniu Loaded:
comboBox.ItemsSource = Kursy;
Alternatywnie zamiast właściwości możesz też wykorzystać do tego konstruktor AutoPlan_WyborOpcji, aby wymagał listy stringów, którą potem wrzucisz gdzie ci trzeba.
Dziękuję bardzo za odpowiedź. :-)
Zastosowałam ten pierwszy sposób. Wszystko działa. Wiedziałam co muszę zrobić, ale nie mając doświadczenia nie wiedziałam jak. Teraz już wiem.