C# 在MVVM WPF中将DataTable绑定到DataGrid

C# 在MVVM WPF中将DataTable绑定到DataGrid,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我对整个C#net的东西还不太熟悉,但我搜索了很多,找不到如何让它工作 我有一个DataGrid,如下所示: <DataGrid Name="SettingGrid" ItemsSource="{Binding Path=PluginSettings, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True" Margin="224.4,

我对整个C#net的东西还不太熟悉,但我搜索了很多,找不到如何让它工作

我有一个DataGrid,如下所示:

<DataGrid Name="SettingGrid" ItemsSource="{Binding Path=PluginSettings, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True" Margin="224.4,10,10,10"/>

PluginSettings是一个数据表,根据用户的操作动态填充不同的列和行。 PluginSettings总是最新的,我已经检查过,在调试模式下,列和行总是我想要的方式。但视图从未更新过。 通过谷歌搜索,我发现DataTable是不可枚举的,所以不能绑定到。我将绑定更改为
{binding Path=PluginSettings.DefaultView
。 这样,我可以让行工作得很好,但列却不行

当我向DataTable中添加列时,视图从不显示它。 如果我正确理解了什么是DefaultView,这意味着我无法将用户在网格上所做的更改复制到实际的数据表来保存它们,而这实际上是我的目标

我错过什么了吗? 使用DataGrid仅仅是一个错误的选择吗?对于我正在尝试做的事情,是否有更好的选择

希望我把我的意思说清楚,英语不是我的第一语言。 谢谢

  • 我必须提到,不鼓励在客户端代码(WPF)中使用
    System.Data
  • 这包括
    System.Data.DataSet
    System.Data.DataTable
    ,以及
    System.Data
    命名空间内的任何其他类
  • 您应该创建适当的数据模型并使用它
  • IMO,
    System.Data
    是一个服务器端概念,不应转移到客户端
  • 例如,在WinRT中,它甚至不存在。没有
    System.Data
    ,因此如果您计划将WPF应用程序迁移到WinRT,您将有大量代码需要重写
话虽如此,该示例在添加新行和添加新列两方面都有效:

<Window x:Class="MiscSamples.DataGridAndDataTable"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataGridAndDataTable" Height="300" Width="300">
    <DockPanel>
        <Button Content="Add Column" DockPanel.Dock="Top" Click="AddColumn"/>
        <Button Content="Add Row" DockPanel.Dock="Top" Click="AddRow"/>
        <DataGrid Name="SettingGrid" 
              ItemsSource="{Binding}" 
              AutoGenerateColumns="True"/>
    </DockPanel>
</Window>
  • 我必须提到,不鼓励在客户端代码(WPF)中使用
    System.Data
  • 这包括
    System.Data.DataSet
    System.Data.DataTable
    ,以及
    System.Data
    命名空间内的任何其他类
  • 您应该创建适当的数据模型并使用它
  • IMO,
    System.Data
    是一个服务器端概念,不应转移到客户端
  • 例如,在WinRT中,它甚至不存在。没有
    System.Data
    ,因此如果您计划将WPF应用程序迁移到WinRT,您将有大量代码需要重写
话虽如此,该示例在添加新行和添加新列两方面都有效:

<Window x:Class="MiscSamples.DataGridAndDataTable"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataGridAndDataTable" Height="300" Width="300">
    <DockPanel>
        <Button Content="Add Column" DockPanel.Dock="Top" Click="AddColumn"/>
        <Button Content="Add Row" DockPanel.Dock="Top" Click="AddRow"/>
        <DataGrid Name="SettingGrid" 
              ItemsSource="{Binding}" 
              AutoGenerateColumns="True"/>
    </DockPanel>
</Window>