2016-05-20 2 views
2

У меня есть 2 ComboBoxes каждый с 2-мя методами _Loaded и _Selection изменилКак связать 2 ComboBoxes

я хочу, чтобы выбрать место в первом меню, а затем следующий выпадающий должны перечислить кучу дат для этого конкретного места

Вот что я до сих пор:

<ComboBox 
    x:Name="comboBoxLocation" 
    Text="Lokation"  
    HorizontalAlignment="Left" Margin="50,305,0,0" 
    VerticalAlignment="Top" 
    Width="120" 
    Loaded="ComboBoxLocation_Loaded" 
    SelectionChanged="ComboBoxLocation_SelectionChanged"/> 

    <ComboBox x:Name="comboBoxDate" 
    Text="Dato" HorizontalAlignment="Left" 
    Margin="195,305,0,0" 
    VerticalAlignment="Top" Width="120" 
    Loaded="ComboBoxDate_Loaded" 
    SelectionChanged="ComboBoxDate_SelectionChanged"/> 

и

private void ComboBoxLocation_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var comboBoxLocation = sender as ComboBox; 

     comboBoxDate.SelectedIndex = 0; 
     comboBoxDate.ItemsSource = controller.GetBusTimes(); 

     //ComboBoxDate_Loaded(sender, e); 
    } 

    private void ComboBoxDate_Loaded(object sender, RoutedEventArgs e) 
    { 
     List<string> dataDate = controller.GetBusTimes(); 

     var comboBoxDate = sender as ComboBox; 

     comboBoxDate.ItemsSource = dataDate; 
    } 

Кажется, это намного сложнее, чем я ожидал ... Я начинаю думать, что у меня может быть какая-то основная ошибка здесь ...

Я занимаюсь этим ... Я могу показать список местоположений в первом поле и соответствующие даты для этого местоположения - второе поле. Но когда я меняю первое место, даты остаются неизменными ...

Как бы я это сделал?

+0

Я бы связать выбранный элемент первого выпадающего списка на свойство вашей ViewModel и в инкубаторе я хотел бы изменить коллекцию (которая должна быть наблюдаемые) элементов в другом свойстве, которое также связано с графическим интерфейсом. Ты знаешь, что я имею в виду? –

+0

* "имеют простую фундаментальную ошибку" * - вы используете wpf, как и winforms, поэтому вы наследуете все связанные с ним проблемы. При использовании шаблона MVVM очень легко создать связь данных между мастером/деталями. Например. привязка коллекции элементов к одному combobox 'ItemsSource' (и отображению только местоположения), который' SelectedItem' привязан к свойству в setter, о котором вы обновляете данные (создаете еще одну коллекцию и увеличиваете уведомление), привязанные ко второму combobox 'ItemsSource'. – Sinatr

+0

И ваша ошибка на самом деле пытается использовать событие «Loaded». Он поднимается только один раз. Скорее переустановите 'comboBoxDate.ItemsSource' в' comboBoxLocation_SelectionChanged'. Я вижу, что вы пробовали это (прокомментированная строка), вам, возможно, придется сделать это за 2 шага (сначала установите значение «null»). – Sinatr

ответ

0

Попробуйте это, я использовал это, чтобы связать 2 comboboxes в приложении для форм Windows.

По умолчанию для выбора обеих комбобокс установлено значение 0 // `Combobox1.SelectedIndex = 0;

private void combobox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var combobox1VALUE= combobox1.Text; 
    } 

private void combobox2_DropDown(object sender, EventArgs e) 
     { 
      //Select datasouece according to combobox 1 data selection(combobox1VALUE) 
      combobox2.Items.Clear(); 
      //add data to combobox2 

     } 
+1

Вы вообще не понимали ОП? – afaolek

0

В вашем коде 2 вопроса.

  1. Не ясно, где & как controller.GetBusTimes() получает информацию о местоположении изменилось? Если каким-то образом вышеупомянутая функция в курсе изменения местоположения и по-прежнему не показывает обновленную информацию в другом поле со списком, то

  2. Смотрите также этот ответ о том, как refresh выпадающий дисплей сразу ItemSource изменяется

0

Почему бы не связать отдельно Источник товара и выбранный товар?

<Combobox ItemsSource="{Binding ItempsProperty}" SelectedItem="{Binding StrValueProperty, Mode=TwoWay}" /> 

И вы можете установить одно свойство в инкубаторе другого

Смежные вопросы