【发布时间】:2025-12-19 08:10:12
【问题描述】:
我有两个 DataGrid 填充了相同类型的不同对象集合。在我的 ViewModel 中,我有一个要绑定到当前选定对象的属性“CurrentObject”。
这意味着如果我在 DataGrid A 中选择一行,CurrentObject 将保存 DataGrid A 的选定项,如果我在 DataGrid B 中选择一行,CurrentObject 将保存 DataGrid B 的选定项。
在这两个 DataGrids 中,我已经完成了这样的绑定:
<DataGrid SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CurrentObject}">
只有当我在一个 DataGrid 中更改选择时,它才会按预期工作。如果我选择了一个已经选择的行,则 CurrentObject 属性不会更新,并且仍然引用来自其他 DataGrid 的对象。我猜这是因为当时没有触发 SelectionChanged 事件
【问题讨论】:
-
你看过MultiBinding msdn.microsoft.com/en-us/library/…
-
MultiBinding 不是用于将多个属性绑定到单个控件。我需要它,反之亦然。如果我错了,请告诉我;-)
-
你的意思是 CurrentObject 只有在 DataGridA 中的 selecteditem 更改为 DataGridB 时才改变?当您更改一个 DataGrid 中的选定项时它不会改变?
-
您的用例很特殊 - 您希望 VM.CurrentObject 使用最近关注的网格的选定项进行更新。看起来您需要连接一些 Click 或 ItemSelected 代码隐藏类型处理程序。通常,如果值相同,您的 PropertyChange 处理程序将不会触发 - 例如您单击已选择的网格项目, SelectedItem 不会改变。因此没有更新。
-
你是对的。这确实很奇怪,但就我而言,这是必要的。想象一下针对多个 DataGrid 中的对象的常见操作(例如编辑项目)。与其为每个 DataGrid 提供多个“编辑项”按钮的操作,我最好将焦点选择绑定到单个属性,并且只提供一个按钮。
标签: wpf wpfdatagrid