【发布时间】:2011-12-11 14:47:55
【问题描述】:
我正在尝试使用 MVVM 模式处理数据网格。问题是,每当我将绑定到 SelectedItem 的 VM 属性更改为 null 时,视图都不会“取消选择”当前选定的项目。这是我在 xaml 中的绑定:
<DataGrid Grid.Column="0" Grid.Row="0"
ItemsSource="{Binding Path=Users}"
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
SelectedItem="{Binding Path=SelectedUser, Mode=TwoWay}">
SelectedItem 绑定从视图到 VM 起作用,因此在 SelectedUser 属性中,我始终拥有选定的对象。问题是在 VM 中我正在做一些有时会将 SelectedUser 属性更改为 null 的东西,所以我希望数据网格也取消选择该行。相反,它仍然处于选中状态,如果我尝试单击同一行,则该属性不会更新。如果我单击任何其他行,则属性会按预期更改。
如果数据网格的绑定属性设置为空,有没有办法取消选择数据网格?另外我正在寻找一个 MVVM 解决方案,因为我不想在后面编写代码。我可以通过编写代码来解决这个问题,所以不要浪费时间提供这样的解决方案:)
l.e.:这是我在 VM 中的属性:
public RPLUser SelectedUser
{
get
{
return selectedUser;
}
set
{
selectedUser = value;
OnPropertyChanged("SelectedUser");
}
}
提前致谢!
【问题讨论】:
-
当您在视图模型中设置属性时,您是否调用 OnPropertyChanged 事件让视图知道它需要更新?
-
是的,我正在编辑描述以提及这一点。好问题,谢谢!
-
您能否发布用于在 VM 中设置属性的代码以及属性本身的代码?
-
在绑定中设置 UpdateSourceTrigger=PropertyChanged 可能会有所帮助。
-
我会尝试 OnPropertyChanged("");绑定可能会发生一些奇怪的事情,但看起来确实不错。您是否尝试过对集合设置断点以查看 SelectedUser 是否在您将其设置为 NULL 后的某个时间再次设置?还要确保您设置的是 SelectedUser 属性,而不是它返回的变量。
标签: wpf binding mvvm datagrid selecteditem