初始化后无法向DataGrid添加行

时间:2014-06-05 20:49:27

标签: c# .net wpf datagrid

我对WPF(Visual Studio Express 2012)很陌生,而且很多,它很酷,但它并不像我期望的那样容易。感谢stackoverflow以及示例和教程,我正在接受它,但就此而言,我受到了阻碍。

我有一个数据网格,我将它绑定到一个列表,我希望当我向列表添加内容时,它会显示在数据网格中。这种情况发生在MainWindow函数中,但在我的代码中没有发生处理按钮点击(当我有一个ListBox时它曾经工作得很好,但是ListBox不支持复选框,至少不是本机的,所以我想要转换它。)

我想知道this tutorial中的旁注是否重要 - 它说ItemSource是指原始列表,但Items属性是转换后的ItemCollection。通过代码逐步执行,我可以看到MyList在单击按钮时获取新项目,但它不会显示在UI中。

请帮忙!

DataGridClass.cs:

namespace WpfTest
{
    class DataGridClass
    {
        public bool CheckboxColumn { get; set; }
        public string Text1Column  { get; set; }
        public string Text2Column  { get; set; }
    }
}

MainWindow.xaml.cs:

namespace WpfTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        List<DataGridClass> myList = new List<DataGridClass>();

        public MainWindow()
        {
            InitializeComponent();
            MyDataGrid.ItemsSource = myList;

            // this works
            myList.Add(new DataGridClass()  
            {
                CheckboxColumn = false,
                Text1Column = "Initialization",
                Text2Column = "ABCD"
            });

        }

        private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            // this doesn't work
            myList.Add(new DataGridClass()
            {
                CheckboxColumn = false,
                Text1Column = "Button Clicked",
                Text2Column = "1234"
            });
        }
    }
}

MainWindow.xaml:

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button x:Name="MyButton" Content="Populate Chart" HorizontalAlignment="Left" Margin="75,36,0,0" VerticalAlignment="Top" Width="120" Click="MyButton_Click"/>
        <DataGrid x:Name="MyDataGrid" HorizontalAlignment="Left" Margin="75,76,0,0" VerticalAlignment="Top" Height="151" Width="349"/>

    </Grid>
</Window>

1 个答案:

答案 0 :(得分:1)

您需要使用ObservableCollection代替List

ObservableCollection<DataGridClass> myList = new ObservableCollection<DataGridClass>();

它实现了INotifyCollectionChanged接口,允许UI获取对集合所做的更改