WPF. dodanie elementów z listy do combobox z pliku .cs

0

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ć?

0

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;
        }
        
1

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.

0
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

0
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1