Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM与DataTable的绑定&;数据视图_C#_.net_Wpf_Mvvm_Ado.net - Fatal编程技术网

C# MVVM与DataTable的绑定&;数据视图

C# MVVM与DataTable的绑定&;数据视图,c#,.net,wpf,mvvm,ado.net,C#,.net,Wpf,Mvvm,Ado.net,我有一个WPF窗口,其中包含一些文本框、组合框和一个使用MVVM的网格 组合框和网格绑定到DataTable和DataView,只有selectedItem值绑定到模型 现在,使用助手方法如下 void GetSelected() { if ( SelectedDataRowView != null ) obj.prop1 = (int)(SelectedDataRowView.Row["field1"]); else obj.prop1 = defaultValue1;

我有一个WPF窗口,其中包含一些文本框、组合框和一个使用MVVM的网格 组合框和网格绑定到DataTable和DataView,只有selectedItem值绑定到模型

现在,使用助手方法如下

void GetSelected()
{
  if ( SelectedDataRowView != null )
    obj.prop1 = (int)(SelectedDataRowView.Row["field1"]);
  else
    obj.prop1 = defaultValue1;
  if ( SelectedDataRow1 != null )
     obj.prop2 = (double)(SelectedDataRow["field2"]);
  if ( SelectedDataRow2!= null )
     obj.prop3 = (string)(SelectedDataRow2["field3"]);
  ...
}

/// and

void ToSelected()
{
 if ( TryFindDataRow("field1", obj.prop1, dv1, out drv1 ) 
   SelectedDataRowView = drv1;
 else
   SelectedDataRowView = null ;
  ...
}
正如你所看到的,它非常丑陋,不知道如何清理它


仅供参考,目前不能使用EF和摆脱DataTable/DataView-db是非sql server的

也许您可以使用适当的接口将DataTable/DataRows转换为POCO对象,并将它们放在对MVVM更友好的ObservableCollection中。您可以编写映射程序来实现这一点,也可以使用类似的框架。您可以继续使用所做的操作,只需使用映射器层来回转换它们。

您看过
BindingListCollectionView
@jberger这是非MVVM部分:)我想让它成为MVVM…@jberger,这就是这个问题的意义,不是吗?你说的是“这是非MVVM部分”,我假设“这部分不会是MVVM”,而不是“我如何才能制造这个MVVM?”。您想知道如何使其成为MVVM吗?不熟悉automapper,它是否支持将datarow/datarowview映射到pocos?它主要使用约定,但您可以调整它以支持您自己的约定。您甚至可以自己编写映射部分,但如果可以接受使用反射,AutoMapper可以为您编写大部分样板代码。在网上查看他们的文档和示例。