3

私はこれについて数日間壁に頭をぶつけてきました、そしてそれは助けを求める時です。

同じ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のインスタンスを処理する必要があります。

任意の洞察をいただければ幸いです。

4

1 に答える 1

2

のセッターpublic VehicleViewModel SelectedVehicleはプライベートであるため、DataGrid は TwoWay モードを使用してそれを変更できません。セッターは公開する必要があります。

于 2010-04-12T04:49:28.403 に答える