WPF, элементы Listbox как источник для другого Listbox

Предположим, у вас есть одно окно списка в WPF с такими элементами, как 1,2,3,4,5 и т. Д. Как вы создаете другое окно списка, рядом с первым, которое отображает его элементы в соответствии с выбором в первом списке? Итак, если вы выберете «элемент 2» в Listbox, вы получите 2A, 2B, 2C и т. Д. В Listbox2, если вы выберете «item 3», вы получите 3A, 3B, 3C и т. Д. В Listbox3

Не могу вставить изображение, но вот пример того, что мне нужно


person CsharpNoob    schedule 19.12.2016    source источник
comment
ItemsSource = {Привязка SelectedItem.ChildCollection, ElementName = yourFirstList}   -  person Kilazur    schedule 19.12.2016


Ответы (1)


Вот пример того, как реализовать такие каскадные ComboBox в соответствии с рекомендуемым шаблоном проектирования MVVM, доступным здесь: https://blog.magnusmontin.net/2013/06/17/cascading-comboboxes-in-wpf-using-mvvm/

Вы можете привязать свойство SelectedItem первого ListBox к исходному свойству вашей модели представления. Затем в установщике этого вы устанавливаете другое свойство коллекции, к которому вы привязываете свойство ItemsSource второго ListBox, например:

<ListBox ItemsSource="{Binding Numbers}" SelectedItem="{Binding SelectedNumber}" />

<ListBox ItemsSource="{Binding SubNumbers}" />

private object _selectedNumber;
public object SelectedNumber
{
    get { return _selectedNumber; }
    set
    {
        _selectedNumber = value;
        NotifyPropertyChanged();

        //set items
        SubNumbers = new List<string> { "3A", "3B", "..." };
        NotifyPropertyChanged("SubNumbers");
    }
}

Убедитесь, что ваш класс модели представления реализует интерфейс INotifyPropertyChanged и вызывает уведомления об изменениях, чтобы это работало: https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

В качестве альтернативы, если классы вашей модели определены таким образом, что каждый элемент в первом ListBox имеет свойство коллекции, которое возвращает связанные элементы, вы можете привязать второй ListBox непосредственно к свойству SelectedItem в первом:

<ListBox x:Name="lb1" ItemsSource="{Binding Numbers}"/>

<ListBox x:Name="lb2" ItemsSource="{Binding SelectedItem.SubProperty, ElementName=lb1}" />
person mm8    schedule 19.12.2016