我是silverlight的初学者,所有这些mvvm模式都有点混乱。Silverlight 5:将命令绑定到listboxitem
在我的应用程序中,我有两个列表框,一个用于国家,一个用于状态。
我想要做的是当我从listbox1中选择一个国家时,第二个列表框将显示所选国家的状态。
即我想将xaml中的命令绑定到listboxitem。
我试图找到由谷歌的解决方案,但无论是解决方案太复杂,我听不懂,或者使用不同的MVVM模式像棱镜,光等
我是silverlight的初学者,所有这些mvvm模式都有点混乱。Silverlight 5:将命令绑定到listboxitem
在我的应用程序中,我有两个列表框,一个用于国家,一个用于状态。
我想要做的是当我从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}"/>
那么你的视图模型可能是一个有点像:
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中的绑定将其直接连接起来。
ItemSource="{Binding Path=SelectedItem.MyItemsProperty, ElementName=MyFirstListBoxName}"
3:您可以使用一个EventTrigger与EventToCommand打开SelectedItemChanged事件到命令的执行。您不是从字面上将命令绑定到ListBoxItem,而是将命令绑定到变更。
我会推荐第一个选项,它是最简单的,并且可以很好地控制正在发生的事情而不会太复杂。
您可以详细说明'在ViewModel属性的Setter中,更改绑定到第二个列表框的列表。 –
我已经扩展了该选项的答案。请参阅上文。 –