多个ListBox将其SelectedItem绑定到ViewModel中的同一属性 - 更好的方法?

时间:2010-03-04 11:14:25

标签: wpf mvvm listbox viewmodel

我有一个WPF列表视图,在一列中,单元格可能包含一个或多个ListBox。

当我右键单击ListBox时,我正在构建一个上下文菜单,其中每个项目都有一个DelegateCommand。目前我将命令参数设置为页面viewmodel本身的SelectedListBox属性,因为我的委托命令需要知道哪个ListBox被右键单击。

然而,这导致了奇怪的行为,我假设是因为我将多个ListBox绑定到相同的页面级属性(SelectedListBox)。

listview的单元格模板的相关XAML如下:

<DataTemplate x:Key="MultipleListBoxCellTemplate">
    <ListBox SelectedItem="{Binding Path=DataContext.SelectedListBox, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" />
</DataTemplate>

是否有更好的方法可以将哪个ListBox右键单击到我的viewmodel,还是有人可以想到另一种方法?非常感谢:)

1 个答案:

答案 0 :(得分:0)

在构建上下文菜单时,您知道选择了哪个列表框,是吗?我可能会在你将上下文项绑定到的ICommand中将其包装起来。这样,每个命令都确切地知道它是由哪个ListBox创建的,并且可以从那里获得所选项目。

或者,您可以通过更改绑定到OneWayToSource来使用SelectedItem来解决问题,以便数据仅从View流回ViewModel。您可能仍然有时间问题,我怀疑这是您当前的问题,但根据具体情况,可能会解决问题。