2012-11-09 75 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

我已經擴展了該選項的答案。請參閱上文。 –

相關問題