好的。得到它的工作。万一它在将来对其他人有所帮助,这就是使它起作用的原因...在您的代码中,为视图模型的 PropertyChanged 事件注册一个事件处理程序,然后使用它来检查每个网格以查看它是否包含正在被选择。如果不是,则清除该网格中的选定项。我还修改了我的 SelectedThing 属性以忽略传入的 NULL 值以避免死锁(在我的应用程序中,初始化后它永远不会为 NULL)
_vm 是一个返回我的视图模型的属性。
_vm.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_vm_PropertyChanged);
void _vm_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedThing")
{
CheckSelection(grid1, _vm.SelectedThing);
CheckSelection(grid2, _vm.SelectedThing);
}
}
void CheckSelection(DataGrid grid, object selectedItem)
{
if (grid.ItemsSource != null)
{
bool itemInGrid = false;
foreach (var item in grid.ItemsSource)
{
if (item == selectedItem)
{
itemInGrid = true;
break;
}
}
if (!itemInGrid) // clear selection
{
grid.SelectedItem = null;
// not sure why, but this causes the highlight to clear. Doesn't work otherwise
grid.IsEnabled = false;
grid.IsEnabled = true;
}
}
}