Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 我可以在WPF上使用MVVM模板来解决这个问题吗?_C#_.net_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 我可以在WPF上使用MVVM模板来解决这个问题吗?

C# 我可以在WPF上使用MVVM模板来解决这个问题吗?,c#,.net,wpf,xaml,mvvm,C#,.net,Wpf,Xaml,Mvvm,我一直在阅读WPF上的MVVM。只要我理解正确,在MVVM中,我应该使用ModelView将模型(要显示的数据)与显示它的方式(视图)分开,以链接两者,对吗 所以我想做的是使用数据集作为模型,其中n个字段来自数据库。字段名称、类型和顺序是可变的(是从SQL Server视图中选择的) 该视图将是一个带有Datagrid的WPF表单 因此,我应该以迭代数据集中每个字段的方式构建modelview,并根据字段类型格式化数据,以便稍后在网格上显示 是否可以在WPF上使用MVVM模板执行此操作 提前谢谢

我一直在阅读WPF上的MVVM。只要我理解正确,在MVVM中,我应该使用ModelView将模型(要显示的数据)与显示它的方式(视图)分开,以链接两者,对吗

所以我想做的是使用
数据集
作为模型,其中n个字段来自数据库。字段名称、类型和顺序是可变的(是从SQL Server视图中选择的)

该视图将是一个带有Datagrid的WPF表单

因此,我应该以迭代数据集中每个字段的方式构建modelview,并根据字段类型格式化数据,以便稍后在网格上显示

是否可以在WPF上使用MVVM模板执行此操作

提前谢谢

更新

根据洛德塔克拉的评论,我将试图澄清我的情况和我试图做的事情。 我正在使用.NET技术构建一个客户机-服务器分层应用程序。客户端和服务器将位于不同的机器中,与WCF通信。 一些不同的客户端将使用此软件,因此假设此场景: 客户1、2和3需要在网格上显示销售报告

客户1需要:销售日期、客户名称和销售导入

客户2需要:销售日期、供应商名称和销售导入

客户3希望在其客户表中添加一个数字字段,该字段表示每个客户的特定销售额以及在销售报告中显示的内容

如果我使用强数据类型,我需要为每个客户机使用一个二进制文件,对吗? 我想要的是对客户端1、2和3使用相同的二进制文件,根据数据库数据更改销售报告的输出

为什么??原因很多:

1) 消除bug:如果我在某个类中发现bug,我可以更正它,重新编译并将更正后的二进制文件提供给我的所有客户机

2) 可伸缩性:如果我向客户端1要求的系统添加一些功能,我可以将该功能提供给所有客户端

3) 灵活性:我可以使用相同的二进制文件更改每个客户端的软件行为

我理解强类型的优点,事实上我会在某些情况下使用它。但在其他方面,灵活性对我来说是至关重要的。 那么,我的选择是什么

谢谢

更新2

在@LordTakkera和本页许多人的帮助下,我成功地开始了应用程序的开发。现在我有了我的模型,我的wcf服务,我的客户和我的第一个视图Vodel和视图。现在,我正试图为我的项目添加多个XAML视图,从而为应用程序增加更多的复杂性。如果我坚持遵循MVVM模式,那么该页面和插入所有其他视图的主页之间的导航也应该使用viewModel(我所读的东西称之为application viewModel)进行管理。我的想法是有一个容器主页,其中有一个区域将显示子视图。我还希望在分离的XAML文件中包含子视图,因为有些视图非常复杂,我会丢失视图!问题是,在具有主容器页面的MVVM模式上找不到WPF导航的单个示例代码。我能找到的所有示例代码:

1) 使用诸如Prism或MVVM ligth之类的外部工具包,现在我不想用新东西搞得乱七八糟

2) 每个视图的所有控件都是在单个XAML上创建的


我需要一些代码来帮助我创建应用程序的基本布局,我想知道我的计划是否可行。谢谢

正如HighCore所指出的,DataSet并不是一个很好的模型选择,但如果不是这样的话,这听起来是对的,不过我在你的帖子中会有一些顾虑

  • 您提到您有变量“type”,这是一个很大的红色标志。如果有变量类型,如何在数据网格中具有一致的列?现在,如果您的意思是要为每种类型使用不同的数据网格(可能使用类型化的数据模板),那么就可以了

  • 当您说“格式化数据”时,我希望您的意思是“将其存储在数据对象中”。WPF绑定到对象的属性,因此您的datagrid应该类似于:

    <DataGrid ItemsSource={Binding DataItems}>
       <DataGrid.Columns>
          <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
          ...
       </DataGrid.Columns>
    </DataGrid>
    
    
    ...
    
  • 基本上,确保绑定到从模型填充的对象。ViewModel绝对是应该执行此转换的对象

    更新

    很抱歉,我不理解您的应用程序的目的,在那个特定的应用程序中,您所说的更有意义。话虽如此,我将设法解决你的关切:

  • 通常,如果基础数据上下文或对象发生更改,则需要更改模型/视图/视图模型。C#是强类型的,WPF的全部要点是具有声明性的强类型UI。我知道您试图显示“泛型”数据,但除非您执行“SELECT*”类型的查询,否则无论如何都需要更改一些代码。如果您知道要显示的视图是什么,那么在修改/添加字段时更改所有代码是完全可以接受的(甚至是可取的,因为这会迫使您在其影响的任何地方考虑更改)

  • 变量或“弱”类型是一个危险信号,因为如上所述,C#是一种强类型语言。强类型有很多优点,尤其是良好的编译时错误检查。如果您希望处于弱类型环境中,请仔细考虑您使用的是哪种语言

  • 这可以追溯到通用数据。您可以使用类型化数据模板来完成一些基于类型的“格式”更改,但这是在多态(而不是弱类型)场景中进行的。您可以使用转换器来执行您描述的货币格式,但我会考虑您正在尝试做什么,并确保它是您想要的方向

  • 更新2 对于这种情况,强类型应该可以。事实上,您正在与WCF服务通信,根据定义,WCF服务非常强大
    <ContentPresenter Content="{Binding CurrentView}"/>