Я уже несколько дней стучу головой о стену, и пришло время обратиться за помощью.Синхронизация DataGrid и DataForm в Silverlight 3
У меня есть DataGrid и DataForm на одном UserControl. Я использую подход 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' (type ' 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.
Любое понимание будет оценено по достоинству.
Ну, это неловко. Как это для случая отсутствия леса для деревьев. Я был настолько сосредоточен на том, что исключение пыталось сказать мне, что я совершенно не замечал этого. Исправлена проблема с удалением «частного» из сеттера. Благодаря! –