私は(Telerik)GridViewにバインドされたリストを持っています。選択された項目は、ユーザーが行をクリックしたときにGridViewで選択された行のオブジェクトに割り当てられたT型の別の変数です。 TはObservableObjectから派生したものです。つまり、MVVM Light Toolkitを使用しています。観測可能オブジェクトをNULLに設定する== CRASH
特定の状況で私のViewModelから行を選択解除する必要があります。選択した項目がViewModelでNULLに設定されている場合、GridViewコントロール上でこれが機能します。 MVVMはクラッシュ(NPE)を報告します。私はそれをデバッグし、ObservableObject.csで失敗しているのを見ました。それは方法
protected bool Set<T>(
Expression<Func<T>> propertyExpression,
ref T field,
T newValue)
を呼び出し、これが設計どおりに作業されているかどうか、私は知りませんRaisePropertyChanged(propertyExpression)
を呼び出すときに、戻りの前に1行をクラッシュします。私の問題は、ビュー内の自分のGridViewの行を選択解除するために、ViewModelで選択したオブジェクトをNULLに設定する必要があることです。 私はCodeBehindを選択解除のために使用できません!
コードは、私が持っている:あなたは、グリッド内の行をクリックすると
public ObservableCollection<ContractTypeDto> ContractTypes { get; private set; }
public ContractTypeDto SelectedContractType
{
get { return _selectedContractType; }
set
{
Set(() => SelectedContractType, ref _selectedContractType, value);
RaisePropertyChanged(() => SelectedContractType);
}
}
が、それはこのレコードの詳細の多くを含む新しいユーザーコントロールを開きます。このコントロールには、独自のViewModelがあります。コールビューモデル(選択したアイテムが格納されている場所)を保存します。ページ(コントロール)が閉じる(破壊された)とき、私はグリッドの行の選択を解除する必要があります。私はそのような方法を呼び出します:
protected void DeselectCallersSelectedItem()
{
if (CallingObject == typeof(ContractTypeListViewModel))
{
var vm = SimpleIoc.Default.GetInstance<ContractTypeListViewModel>();
vm.SelectedContractType = null;
}
}
アイデア?
オリジナルのメッセージを追加情報で更新しました。 MVVM Lightツールキットを使用しています。 ObservableObjectはこのツールキットのクラスであり、INotifyPropertyChangedを実装しています。アイテムを 'null'に設定すると、MVVMのライトがクラッシュします。 – ThommyB