我是Silverlight的初学者,所有这些mvvm模式都有点令人困惑。
在我的应用程序中,我有两个列表框,一个用于国家,一个用于州。
我想要做的是当我从列表框中选择一个国家时,第二个列表框将显示所选国家/地区的状态。
即我想将xaml中的命令绑定到listboxitem。
我试图通过谷歌找到解决方案,但任何一种解决方案都太复杂,我无法理解或使用不同的mvvm模式,如棱镜,光线等。
答案 0 :(得分:1)
有几种不同的方法可以做到这一点:
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:您可以将EventTrigger与EventToCommand一起使用,将SelectedItemChanged事件转换为Command执行。您并没有将命令绑定到ListBoxItem,而是将命令绑定到更改。
我会推荐第一个选项,它是最简单的,让你可以很好地控制正在发生的事情而不会太复杂。