我是C#/.NET的新手,我正在使用MVVM parardigm开发一个WPF应用程序。主窗口有几个选项卡,在其中一个选项卡项中,我希望嵌入一个可以通过阅读XML文件来加载的表。XML文件包含有关仪器的数据。阅读相关内容后,看起来DataGrid就是我想要的构造。2下面是我插入到MainWindow.xaml文件中的特定选项卡中的dataGrid的代码:
<TabItem Header="Device Info" Width="100" Height="25">
<DataGrid Name="DeviceInfoGrid" ItemsSource="{Binding}" AlternatingRowBackground="LightBlue" AlternationCount="2">
<DataGrid.Columns>
<DataGridTextColumn Header="Alias" Binding="{Binding Alias}"></DataGridTextColumn>
<DataGridTextColumn Header="Interface Type" Binding="{Binding InterfaceType}"></DataGridTextColumn>
<DataGridTextColumn Header="Resource ID" Binding="{Binding VisaResource}"></DataGridTextColumn>
<DataGridTextColumn Header="MFG" Binding="{Binding Make}"></DataGridTextColumn>
<DataGridTextColumn Header="Model" Binding="{Binding Model}"></DataGridTextColumn>
<DataGridTextColumn Header="Cal Date" Binding="{Binding CalDate}"></DataGridTextColumn>
<DataGridTextColumn Header="Cal Due Date" Binding="{Binding CalDueDate}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
现在,我相信在我的MainWindow.xaml.cs(视图模型?)中,这就是我想要定义数据网格的数据上下文的地方?Microsoft示例建议我应该将DataGrid绑定到DataTable,DataTable由一些可以从XML文件读取的函数填充。
基本上,我希望此选项卡在打开时读取XML文件并根据XML中的信息填充数据网格的行。如果文件中有“Alias”元素,然后读取该元素并将其存储在“别名”列下的下一可用行中。然后,我希望允许用户编辑DataGrid中显示的内容,并在退出该选项卡后自动保存对XML文件的任何更改。
这里涉及了许多关于MVVM和.NET中提供的各种类的概念(网格,表格等),我努力在我的脑海中连接,看看它是如何走到一起的。我会感谢任何指针。你不必进入实现的本质,但如果你能概述一下我所需要的主要组成部分,让我知道我是否走在正确的道路上,那就太好了。
谢谢
1条答案
按热度按时间cclgggtu1#
一开始,你会误解很多基本的MVVM概念。有很多很好的资源供你学习。你可以使用下面的资源作为你将来研究WPF和MVVM的基础:
1.
我相信在我的MainWindow.xaml.cs(视图模型?)
这是您的代码隐藏,而不是您的VM。任何以“. xaml.cs”结尾的内容都是相关xaml文件的代码隐藏。. xaml.cs和.xaml文件的组合构成MVVM中的V(视图)。
2.
这就是我想要定义数据网格的数据上下文的地方
我们离VM越来越近了,有几种定义数据上下文的方法,但是通常在XAML中定义,因为这样可以方便地绑定到视图模型中的视图模型参数。
3.
读取XML文件并根据XML中的信息填充数据网格的行
我个人用视图模型工厂和数据提供程序来处理这个问题。这是一个相当广泛的主题,有许多可接受的解决方案,所以为了这个回应的目的,我将忽略回答这个问题,因为它有点超出了这些基本MVVM概念的范围。相反,我们可以称之为MVVM的M(模型)层。但是,我省略了我们如何读写数据。
4.
MVVM和.NET中提供的各种类(网格、表格等)
现在忘掉这些,只关注基本的东西。
为您介绍基本MVVM
您将定义3个视图模型。请记住,您的视图模型需要INotifyPropertyChanged
然后在.xaml视图中:
主视图:
我的网格视图:
有一件事我没有解释清楚:
祝你好运