Silverlight 5:绑定命令到listboxitem

时间:2012-11-09 03:30:43

标签: xaml silverlight-5.0 listboxitem

我是Silverlight的初学者,所有这些mvvm模式都有点令人困惑。

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

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

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

我试图通过谷歌找到解决方案,但任何一种解决方案都太复杂,我无法理解或使用不同的mvvm模式,如棱镜,光线等。

1 个答案:

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

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