Xaml Silverlight 5:将命令绑定到listboxitem

Xaml Silverlight 5:将命令绑定到listboxitem,xaml,silverlight-5.0,listboxitem,Xaml,Silverlight 5.0,Listboxitem,我是silverlight的初学者,所有这些mvvm模式都有点混乱 在我的应用程序中,我有两个列表框,一个用于国家,一个用于州 我要做的是,当我从列表框中选择一个国家时,第二个列表框将显示所选国家的状态 i、 我想把xaml中的命令绑定到listboxitem 我试图通过谷歌找到解决方案,但这两种解决方案都太复杂,我无法理解,或者使用不同的mvvm模式,如prism、light等。有几种不同的方法: 1:(最简单!)将第一个列表框的SelectedItem绑定到您的ViewModel。在View

我是silverlight的初学者,所有这些mvvm模式都有点混乱

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

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

i、 我想把xaml中的命令绑定到listboxitem


我试图通过谷歌找到解决方案,但这两种解决方案都太复杂,我无法理解,或者使用不同的mvvm模式,如prism、light等。

有几种不同的方法:

1:(最简单!)将第一个列表框的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");
    }
}
公共列表列表一{get;set;}
私人MyItem\u selectedItem
公共MyItem SelectedItem
{
获取{return\u selectedItem;}
设置
{
_选择editem=值;
ListTwo=\u selectedItem.SubItems;
}
}
私人名单(二)
公开名单清单二
{
获取{return\u listwo;}
设置
{
_listTwo=值;
RaisePropertyChanged(“列表二”);
}
}
2:如果第二个列表的数据实际上是第一个列表中项目的属性,那么可以使用xaml中的绑定将它们直接连接起来

ItemSource=“{Binding Path=SelectedItem.MyItemsProperty,ElementName=MyFirstListBoxName}”

3:您可以将EventTrigger与EventToCommand一起使用,将SelectedItemChanged事件转换为命令执行。您并不是将命令绑定到ListBoxItem,而是将命令绑定到更改


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

有几种不同的方法可以做到这一点:

1:(最简单!)将第一个列表框的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");
    }
}
公共列表列表一{get;set;}
私人MyItem\u selectedItem
公共MyItem SelectedItem
{
获取{return\u selectedItem;}
设置
{
_选择editem=值;
ListTwo=\u selectedItem.SubItems;
}
}
私人名单(二)
公开名单清单二
{
获取{return\u listwo;}
设置
{
_listTwo=值;
RaisePropertyChanged(“列表二”);
}
}
2:如果第二个列表的数据实际上是第一个列表中项目的属性,那么可以使用xaml中的绑定将它们直接连接起来

ItemSource=“{Binding Path=SelectedItem.MyItemsProperty,ElementName=MyFirstListBoxName}”

3:您可以将EventTrigger与EventToCommand一起使用,将SelectedItemChanged事件转换为命令执行。您并不是将命令绑定到ListBoxItem,而是将命令绑定到更改


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

您可以详细说明“在ViewModel属性的Setter中,更改绑定到第二个列表框的列表。”我已经扩展了该选项的答案。请参见上文。您能否详细说明“在ViewModel属性的Setter中,更改绑定到第二个列表框的列表。”我已扩展了该选项的答案。请看上面。