C# MVVM与DataTable的绑定&;数据视图
我有一个WPF窗口,其中包含一些文本框、组合框和一个使用MVVM的网格 组合框和网格绑定到DataTable和DataView,只有selectedItem值绑定到模型 现在,使用助手方法如下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;
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可以为您编写大部分样板代码。在网上查看他们的文档和示例。