【发布时间】:2016-08-01 06:55:40
【问题描述】:
我有一个绑定到 (Telerik) GridView 的列表。所选项目是类型为 T 的单独变量,当用户单击某行时,该变量会分配给 GridView 中所选行的对象。 T 派生自 ObservableObject。这意味着我正在使用 MVVM Light Toolkit。
在某些情况下,我需要从 ViewModel 中取消选择该行。在 GridView 控件上,如果在 ViewModel 中将所选项目设置为 NULL,则此方法有效。每当我这样做时,MVVM 都会报告崩溃 (NPE)。我对其进行了调试,发现它在 ObservableObject.cs 中失败了。它调用一个方法
protected bool Set<T>(
Expression<Func<T>> propertyExpression,
ref T field,
T newValue)
调用RaisePropertyChanged(propertyExpression)时在返回前崩溃一行
我不知道这是否按设计工作。我的问题是,我需要在 ViewModel 中将选定的对象设置为 NULL 以取消选择视图中我的 GridView 的一行。 我不能使用 CodeBehind 来取消选择!
我的代码:
public ObservableCollection<ContractTypeDto> ContractTypes { get; private set; }
public ContractTypeDto SelectedContractType
{
get { return _selectedContractType; }
set
{
Set(() => SelectedContractType, ref _selectedContractType, value);
RaisePropertyChanged(() => SelectedContractType);
}
}
当您单击网格中的一行时,它会打开一个新的 UserControl,其中包含该记录的许多详细信息。这个控件有它自己的 ViewModel。我存储调用视图模型(存储所选项目的位置)。当页面(控件)关闭(销毁)时,我必须取消选择网格中的行。我这样调用一个方法:
protected void DeselectCallersSelectedItem()
{
if (CallingObject == typeof(ContractTypeListViewModel))
{
var vm = SimpleIoc.Default.GetInstance<ContractTypeListViewModel>();
vm.SelectedContractType = null;
}
}
有什么想法吗?
【问题讨论】:
标签: wpf mvvm-light radgridview