如何在wpf中从落后代码填充DataGrid行
当我单击按钮1时,数据网格已加载,但为什么我的文本(text1和name1)不显示在数据网格的单元格中 其设计规范:如何在wpf中从落后代码填充DataGrid行,wpf,Wpf,当我单击按钮1时,数据网格已加载,但为什么我的文本(text1和name1)不显示在数据网格的单元格中 其设计规范: <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid" Width="200"> <DataGrid.Columns>
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid" Width="200">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridCheckBoxColumn Header="visible" />
<DataGridTextColumn Header="Header" />
</DataGrid.Columns>
</DataGrid>
如果需要更多信息,请告诉我,请帮助我 您的XAML代码没有要显示的属性的绑定。对于AutoGenerateColumns=“False”,这是必须的。 至少您的类需要为要在DataGrid中显示的属性实现INotifyPropertyChanged接口。 您也不应该使用List绑定到ItemsSource,而是使用 您的XAML应该是这样的:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MyItemsSource}" Height="200" Name="dataGrid" Width="200">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridCheckBoxColumn Header="Visible" Binding="{Binding visible}" />
<DataGridTextColumn Header="Header" Binding="{Binding Header}" />
</DataGrid.Columns>
</DataGrid>
以及背后的代码:
public class DataGridStructure : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private bool _visible = false;
public bool visible {
get{ return _visible; }
set{
_visible = value;
set{ OnPropertyChanged("visible");
}
}
private string _nameField = string.Empty;
public bool NameField {
get{ return _nameField; }
set{
_nameField = value;
set{ OnPropertyChanged("NameField");
}
}
private string _headerText = string.Empty;
public bool HeaderText {
get{ return _headerText; }
set{
_headerText = value;
set{ OnPropertyChanged("HeaderText");
}
}
}
public void CreateDataTable()
{
MyItemsSource.Add(new DataGridStructure() {HeaderText="text1", NameField="name1", visible=true});
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DataContext = this;
}
private ObservableCollection<DataGridStructure> _dataGridStructure = new ObservableCollection<DataGridStructure>();
public ObservableCollection<DataGridStructure> MyItemsSource{get{ return _dataGridStructure; }}
公共类DataGridStructure:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
受保护的void OnPropertyChanged(字符串名称)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(处理程序!=null)
{
处理程序(此,新PropertyChangedEventArgs(名称));
}
}
private bool_visible=false;
公共布尔可见{
获取{return\u visible;}
集合{
_可见=价值;
集合{OnPropertyChanged(“可见”);
}
}
私有字符串_nameField=string.Empty;
公共布尔名称字段{
获取{return\u nameField;}
集合{
_名称字段=值;
set{OnPropertyChanged(“NameField”);
}
}
私有字符串_headerText=string.Empty;
公共学校校长课文{
获取{return\u headerText;}
集合{
_headerText=值;
set{OnPropertyChanged(“HeaderText”);
}
}
}
public void CreateDataTable()
{
添加(新的DataGridStructure(){HeaderText=“text1”,NameField=“name1”,visible=true});
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
DataContext=this;
}
私有ObservableCollection_dataGridStructure=新ObservableCollection();
公共ObservableCollection MyItemsSource{get{return}dataGridStructure;}
您的XAML代码没有绑定到要显示的属性。必须使用AutoGenerateColumns=“False”进行绑定。
至少您的类需要为要在DataGrid中显示的属性实现INotifyPropertyChanged接口。
您也不应该使用List绑定到ItemsSource,而是使用
您的XAML应该是这样的:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MyItemsSource}" Height="200" Name="dataGrid" Width="200">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridCheckBoxColumn Header="Visible" Binding="{Binding visible}" />
<DataGridTextColumn Header="Header" Binding="{Binding Header}" />
</DataGrid.Columns>
</DataGrid>
以及背后的代码:
public class DataGridStructure : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private bool _visible = false;
public bool visible {
get{ return _visible; }
set{
_visible = value;
set{ OnPropertyChanged("visible");
}
}
private string _nameField = string.Empty;
public bool NameField {
get{ return _nameField; }
set{
_nameField = value;
set{ OnPropertyChanged("NameField");
}
}
private string _headerText = string.Empty;
public bool HeaderText {
get{ return _headerText; }
set{
_headerText = value;
set{ OnPropertyChanged("HeaderText");
}
}
}
public void CreateDataTable()
{
MyItemsSource.Add(new DataGridStructure() {HeaderText="text1", NameField="name1", visible=true});
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DataContext = this;
}
private ObservableCollection<DataGridStructure> _dataGridStructure = new ObservableCollection<DataGridStructure>();
public ObservableCollection<DataGridStructure> MyItemsSource{get{ return _dataGridStructure; }}
公共类DataGridStructure:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
受保护的void OnPropertyChanged(字符串名称)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(处理程序!=null)
{
处理程序(此,新PropertyChangedEventArgs(名称));
}
}
private bool_visible=false;
公共布尔可见{
获取{return\u visible;}
集合{
_可见=价值;
集合{OnPropertyChanged(“可见”);
}
}
私有字符串_nameField=string.Empty;
公共布尔名称字段{
获取{return\u nameField;}
集合{
_名称字段=值;
set{OnPropertyChanged(“NameField”);
}
}
私有字符串_headerText=string.Empty;
公共学校校长课文{
获取{return\u headerText;}
集合{
_headerText=值;
set{OnPropertyChanged(“HeaderText”);
}
}
}
public void CreateDataTable()
{
添加(新的DataGridStructure(){HeaderText=“text1”,NameField=“name1”,visible=true});
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
DataContext=this;
}
私有ObservableCollection_dataGridStructure=新ObservableCollection();
公共ObservableCollection MyItemsSource{get{return}dataGridStructure;}
嗯,您必须为手动定义的每一列启用autogeneratecolumns或设置绑定。嗯,您必须为手动定义的每一列启用autogeneratecolumns或设置绑定。您应该将绑定设置为“绑定”属性,而不是“标题”.Header只是列标题文本,不是数据值。我没有测试代码,但我同意它必须是绑定属性才能显示数据。谢谢您应该将绑定设置为“绑定”属性而不是“标题”.Header只是列标题文本,不是数据值。我没有测试代码,但我同意它必须是绑定属性才能显示数据。谢谢