我是 silverlight 的初学者,所有这些 mvvm 模式有点令人困惑。
在我的应用程序中,我有两个列表框,一个用于国家,一个用于州。
我想要做的是,当我从 listbox1 中选择一个国家/地区时,第二个列表框将显示所选国家/地区的州。
即我想将xaml 中的命令绑定到listboxitem。
我试图通过谷歌找到解决方案,但任何一种解决方案都太复杂了,我无法理解或使用不同的 mvvm 模式,如棱镜、光等。
我是 silverlight 的初学者,所有这些 mvvm 模式有点令人困惑。
在我的应用程序中,我有两个列表框,一个用于国家,一个用于州。
我想要做的是,当我从 listbox1 中选择一个国家/地区时,第二个列表框将显示所选国家/地区的州。
即我想将xaml 中的命令绑定到listboxitem。
我试图通过谷歌找到解决方案,但任何一种解决方案都太复杂了,我无法理解或使用不同的 mvvm 模式,如棱镜、光等。
有几种不同的方法可以做到这一点:
1:(最简单!)将第一个 ListBox 的 SelectedItem 绑定到您的 ViewModel。在 ViewModel 属性的 Setter 中,更改要绑定到第二个列表框的列表。请注意,您的 ViewModel 属性将需要使用 INotifyPropertyChanged 来通知列表已更改。
例如:如果您的 xaml 看起来像:
<ListBox ItemSource="{Binding ListOne}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"/>
<ListBox ItemSource="{Binding ListTwo}"/>
那么你的 ViewModel 可能有点像:
public List<MyItem> ListOne { get; set; }
private MyItem _selectedItem
public MyItem SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
ListTwo = _selectedItem.SubItems;
}
}
private List<MyOtherItem> _listTwo
public List<MyOtherItem> ListTwo
{
get { return _listTwo; }
set
{
_listTwo = value;
RaisePropertyChanged("ListTwo");
}
}
2:如果第二个列表的数据实际上是第一个列表中项目的属性,则可以使用 xaml 中的 Binding 直接将它们连接起来。
ItemSource="{Binding Path=SelectedItem.MyItemsProperty, ElementName=MyFirstListBoxName}"
3:您可以使用带有 EventToCommand 的 EventTrigger 将 SelectedItemChanged 事件转换为 Command 执行。您并没有将命令绑定到 ListBoxItem,而是将命令绑定到change。
我会推荐第一个选项,它最简单,可以让您很好地控制正在发生的事情而不会变得太复杂。