【问题标题】:Multiple ListBoxes binding their SelectedItem to the same property in ViewModel - better way?多个 ListBox 将它们的 SelectedItem 绑定到 ViewModel 中的同一属性 - 更好的方法?
【发布时间】:2010-03-04 11:14:25
【问题描述】:

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

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

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

列表视图的单元格模板的相关XAML如下:

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

有没有更好的方法来获取哪个 ListBox 已被右键单击到我的视图模型,或者任何人都可以想到另一种方法?非常感谢:)

【问题讨论】:

    标签: wpf mvvm listbox viewmodel


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多