1

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

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

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

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

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

4

1 回答 1

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:您可以使用带有 EventToCommand 的 EventTrigger 将 SelectedItemChanged 事件转换为 Command 执行。您并没有将命令绑定到 ListBoxItem,而是将命令绑定到change

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

于 2012-11-09T03:42:02.137 回答