我有一个绑定到(Telerik)GridView的List。所选项目是T类型的单独变量,当用户单击某一行时,该变量将在GridView中分配所选行的对象。 T来自ObservableObject 。这意味着我正在使用 MVVM Light Toolkit 。
在某些情况下,我需要取消选择ViewModel中的行。如果在ViewModel中将所选项目设置为NULL,则在GridView控件上可以正常工作。每当我这样做时,MVVM都会报告崩溃(NPE)。我调试它,发现它在ObservableObject.cs中失败了。它调用方法
protected bool Set<T>(
Expression<Func<T>> propertyExpression,
ref T field,
T newValue)
在调用RaisePropertyChanged(propertyExpression)
我不知道这是否按设计工作。我的问题是,我需要在ViewModel中将所选Object设置为NULL,以在View中取消选择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。我存储调用视图Model(存储所选项目的位置)。当页面(控件)关闭(销毁)时,我必须取消选择网格中的行。我称之为这样的方法:
protected void DeselectCallersSelectedItem()
{
if (CallingObject == typeof(ContractTypeListViewModel))
{
var vm = SimpleIoc.Default.GetInstance<ContractTypeListViewModel>();
vm.SelectedContractType = null;
}
}
有什么想法吗?
答案 0 :(得分:0)
要删除集合,您可以将SelectedItem
属性设置为null或清除SelectedItems
。
gridViewName.SelectedItem = null;
gridViewName.SelectedItems.Clear();
如果没有显示代码,我们无法准确地为您提供帮助。我认为您可以做的解决方案是在视图模型中实现INotifyPropertyChanged
接口,并将所选项绑定到该类型的属性。如果有任何绑定失败,也请检查输出窗口。