如何在wpf中从落后代码填充DataGrid行

如何在wpf中从落后代码填充DataGrid行,wpf,Wpf,当我单击按钮1时,数据网格已加载,但为什么我的文本(text1和name1)不显示在数据网格的单元格中 其设计规范: <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid" Width="200"> <DataGrid.Columns>

当我单击按钮1时,数据网格已加载,但为什么我的文本(text1和name1)不显示在数据网格的单元格中

其设计规范:

<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只是列标题文本,不是数据值。我没有测试代码,但我同意它必须是绑定属性才能显示数据。谢谢