C# 绑定到DataTable的Datagrid不显示动态添加到DataTable的任何行
我有这样的数据网格: 公共类myGrid:DataGrid {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
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"); }
}