私はこれについて数日間壁に頭をぶつけてきました、そしてそれは助けを求める時です。
同じUserControlにDataGridとDataFormがあります。私はMVVMアプローチを使用しているので、UserControl用の単一のViewModelがあります。そのViewModelには、この議論に関連するいくつかのプロパティがあります。
public ObservableCollection<VehicleViewModel> Vehicles { get; private set; }
public VehicleViewModel SelectedVehicle
{
get { return selectedVehicle; }
private set
{
selectedVehicle = value;
OnPropertyChanged( "SelectedVehicle" );
}
}
XAMLでは、DataGridとDataFormを次のように定義しています。
<data:DataGrid SelectionMode="Single"
ItemsSource="{Binding Vehicles}"
SelectedItem="{Binding SelectedVehicle, Mode=TwoWay}"
AutoGenerateColumns="False"
IsReadOnly="True">
<dataFormToolkit:DataForm CurrentItem="{Binding SelectedVehicle}" />
したがって、SelectedItemがDataGridで変更されると、その変更をViewModelにプッシュバックし、ViewModelがOnPropertyChangedを発生させると、DataFormは新しく選択されたVehicleViewModelの情報で更新されます。ただし、SelectedVehicleのセッターが呼び出されることはなく、VSの[出力]ウィンドウに次のエラーが表示されます。
System.Windows.Dataエラー:ConvertBackは値'xxxx.ViewModel.VehicleViewModel'(タイプ'xxxx.ViewModel.VehicleViewModel')を変換できません。BindingExpression:Path ='SelectedVehicle' DataItem ='xxxx.ViewModel.MainViewModel'(HashCode = 31664161); ターゲット要素は'System.Windows.Controls.DataGrid'(Name ='');です。ターゲットプロパティは「SelectedItem」(タイプ「System.Object」)です。System.MethodAccessException:xxxx.ViewModel.MainViewModel.set_SelectedVehicle(xxxx.ViewModel.VehicleViewModel)
VehicleViewModelからオブジェクトへの変換(またはオブジェクトへの変換)に問題があるように聞こえますが、なぜそうなるのか(またはその仮定で正しい方向に進んでいる場合でも)について混乱しています。DataGridの各行/アイテムはVehicleViewModelである必要があります(ItemsSourceはそのタイプのObservableCollectionにバインドされているため)。したがって、SelectedItemが変更されると、VehicleViewModelのインスタンスを処理する必要があります。
任意の洞察をいただければ幸いです。