我是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中,更改綁定到第二個列表框的列表。 –
我已經擴展了該選項的答案。請參閱上文。 –