假设您在WPF中有一个列表框,其中包含1,2,3,4,5等项目。如何根据选择显示另一个列表框,紧挨着第一个列表框显示其项目在第一个列表框?因此,如果您选择"项目2"如果您选择"项目3"在列表框中,您可以在Listbox2中获得2A,2B,2C等。您在Listbox3中获得3A,3B,3C等
Can't embed the picture yet but here's the example of what i need
答案 0 :(得分:1)
有一个示例说明如何根据此处提供的推荐MVVM设计模式实现此类级联ComboBox:https://blog.magnusmontin.net/2013/06/17/cascading-comboboxes-in-wpf-using-mvvm/
您可以将第一个ListBox的SelectedItem属性绑定到视图模型的source属性。在这个的setter中,然后设置另一个集合属性,将第二个ListBox的ItemsSource属性绑定到,例如:
<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}" />