Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 绑定到DataTable的Datagrid不显示动态添加到DataTable的任何行_C#_Wpf_Data Binding_Datagrid_Datatable - Fatal编程技术网

C# 绑定到DataTable的Datagrid不显示动态添加到DataTable的任何行

C# 绑定到DataTable的Datagrid不显示动态添加到DataTable的任何行,c#,wpf,data-binding,datagrid,datatable,C#,Wpf,Data Binding,Datagrid,Datatable,我有这样的数据网格: 公共类myGrid:DataGrid { DataTable=newdatatable(); 公共myGrid() { } 已初始化受保护的覆盖无效(事件参数e) { 基础。初始化(e); 列表=新列表{“Size1”、“Size2”、“Price”、“Price2”、“Note”}; foreach(列表中的字符串名称) { 表.列.添加(名称); DataGridTextColumn c=新的DataGridTextColumn(); c、 标题=名称; c、 Bind

我有这样的数据网格:

公共类myGrid:DataGrid {

DataTable=newdatatable();
公共myGrid()
{
}
已初始化受保护的覆盖无效(事件参数e)
{
基础。初始化(e);
列表=新列表{“Size1”、“Size2”、“Price”、“Price2”、“Note”};
foreach(列表中的字符串名称)
{
表.列.添加(名称);
DataGridTextColumn c=新的DataGridTextColumn();
c、 标题=名称;
c、 Binding=新绑定(Table.Columns[Name].ColumnName);
本条第1.2.3列添加(c);
}
DataColumn[]键=新的DataColumn[1];
键[0]=表.列[“价格”];
Table.PrimaryKey=键;
this.DataContext=表;
}
public void AddRow(对象[]值)
{
Table.LoadDataRow(值,true);
}
}

调用AddRow后,表中确实有一行,但myGrid没有。 我做错了什么


谢谢

使用MVVM将是一种更好的方法。。。。您甚至不需要为此继承网格

视图模型
类MyViewModel:INotifyPropertyChanged
{
私人可观察到的收集;
公共MyViewModel()
{
//FunctiontoFillCollection()
}
公共可观测集合
{
获取{return myCollection;}
设置
{
mycollection=value;
//我将把InotifyProperty的实现留给您
//用谷歌搜索……)
关于财产变更(“MyCollection”);
}
}
}
View.Xaml

View.xaml.cs
//
///MainView.xaml的交互逻辑
/// 
公共部分类主视图:窗口
{
公共主视图()
{
初始化组件();
this.DataContext=新的MyViewModel();
}
}
现在将一个东西添加到MyColleciton中,它将在视图中自动反射


阅读一些有关MVVm实现的文章,以便更好地理解…

将表设置为公共属性:

private DataTable m_Table

public DataTable Table
{
    get { return this.m_Table; }

    protected set { m_Table = value; NotifyPropertyChanged("Table"); }
}

您还需要调用NotifyPropertyChanged(“表”);在AddRow函数中。

它永远不会自动加载。。。。。您需要通知已更改的集合。。。。使用ObservableCollection()对集合更改进行节点化。有代码示例吗?我不太明白你的意思/从哪里开始。谢谢!
class MyViewModel:INotifyPropertyChanged
{
     private ObservableColleciton<string> myCollection;

   public MyViewModel()
   {
      //FunctiontoFillCollection()
   }

   public ObservableColleciton<string> MyCollection
   {
         get { return myCollection;}
         set
         {
             mycolletion = value;
             // i am leaving implemenation of INotifyPropertyChanged on you 
             // google it.. :)
             OnpropertyChanged("MyCollection");
         }
   }
}
<DataGrid ItemsSource={Binding Path=MyCollection}>
 <!--Make Columns according to you-->
</DataGrid>
/// <summary>
/// Interaction logic for MainView.xaml
/// </summary>
public partial class MainView : Window
{
    public MainView()
    {
        InitializeComponent();
        this.DataContext = new MyViewModel();
    }
}
private DataTable m_Table

public DataTable Table
{
    get { return this.m_Table; }

    protected set { m_Table = value; NotifyPropertyChanged("Table"); }
}