我对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>
答案 0 :(得分:1)
您需要使用ObservableCollection
代替List
ObservableCollection<DataGridClass> myList = new ObservableCollection<DataGridClass>();
它实现了INotifyCollectionChanged
接口,允许UI获取对集合所做的更改