silverlight - 在 Silverlight 3 中同步 DataGrid 和 DataForm

标签 silverlight datagrid dataform

我已经为此苦苦思索了几天,是时候寻求帮助了。

我在同一个 UserControl 上有 DataGrid 和 DataForm。我使用的是 MVVM 方法,因此用户控件只有一个 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}" />

因此,当 DataGrid 上的 SelectedItem 更改时,它应该将该更改推送回 ViewModel,并且当 ViewModel 引发 OnPropertyChanged 时,DataForm 应该使用新选择的 VehicleViewModel 的信息自行刷新。但是,永远不会调用 SelectedVehicle 的 setter ,并且在 VS 的输出窗口中我看到以下错误:

System.Windows.Data 错误:ConvertBack 无法转换值“xxxx.ViewModel.VehicleViewModel”(类型“xxxx.ViewModel.VehicleViewModel”)。 BindingExpression: Path='SelectedVehicle' DataItem='xxxx.ViewModel.MainViewModel' (HashCode=31664161);目标元素是“System.Windows.Controls.DataGrid”(名称='');目标属性是“SelectedItem”(类型“System.Object”)。System.MethodAccessException:xxxx.ViewModel.MainViewModel.set_SelectedVehicle(xxxx.ViewModel.VehicleViewModel)

听起来好像在从 VehicleViewModel 转换为对象(或再次转换回来)时遇到问题,但我很困惑为什么会这样(或者即使我的假设是正确的)。 DataGrid 中的每一行/项目都应该是一个 VehicleViewModel(因为 ItemsSource 绑定(bind)到该类型的 ObservableCollection),所以当 SelectedItem 发生变化时,它应该处理 VehicleViewModel 的一个实例。

如有任何见解,我们将不胜感激。

最佳答案

您在 public VehicleViewModel SelectedVehicle 上的 setter 是私有(private)的,因此 DataGrid 无法使用 TwoWay 模式修改它。您的二传手需要公开。

关于silverlight - 在 Silverlight 3 中同步 DataGrid 和 DataForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617714/

相关文章:

c# - 将单个节点从 XML 文件读入列表框(WP7、Silverlight、C#)

WPF DataGrid 失去对 ContextMenu 的关注

wpf - {RelativeSource PreviousData} 与 DataGrid 一起使用时始终为 NULL

wpf - 我们可以通过 LAN Access Db 共享 Silverlight 应用程序吗

c# - 业务应用程序 : Will F# make my life easy?

c# - 在 Silverlight 中使用 DataForm 中的密码文本框

c# - 更改或访问 Silverlight 数据表单编辑模板中的控件

silverlight - WP7 : Change the visibility of an item in a selected listbox item

c# - 在 CurrentCellChanged 上获取 WPF DataGrid 的单元格内容