2012-11-09 147 views
1

我是silverlight的初学者,所有这些mvvm模式都有点混乱。Silverlight 5:将命令绑定到listboxitem

在我的应用程序中,我有两个列表框,一个用于国家,一个用于状态。

我想要做的是当我从listbox1中选择一个国家时,第二个列表框将显示所选国家的状态。

即我想将xaml中的命令绑定到listboxitem。

我试图找到由谷歌的解决方案,但无论是解决方案太复杂,我听不懂,或者使用不同的MVVM模式像棱镜,光等

回答

1

有这样做的几种不同的方式:

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,而是将命令绑定到变更

我会推荐第一个选项,它是最简单的,并且可以很好地控制正在发生的事情而不会太复杂。

+0

您可以详细说明'在ViewModel属性的Setter中,更改绑定到第二个列表框的列表。 –

+0

我已经扩展了该选项的答案。请参阅上文。 –

相关问题