.NET 6 WPF技术问题:DataGrid加载后为空,求错误排查
DataGrid显示为空的原因与解决方法
问题根源
你使用Enumerable.Empty<WidgetA>()创建了一个空的IEnumerable<WidgetA>集合,之后调用的Append方法不会修改原集合本身,而是返回一个包含新增元素的全新集合。但你没有将这些新集合重新赋值给list变量,最终绑定给DataGrid的仍然是最初的空集合,所以界面没有数据显示。
解决办法
有三种可行的修改方式:
方式一:改用List<WidgetA>(推荐,操作更直观)
List的Add方法会直接修改自身集合:
private void Window_Loaded(object sender, RoutedEventArgs e) { var key1 = new WidgetA { Id = 1, Key = 52 }; var key2 = new WidgetA { Id = 1, Key = 102 }; var key3 = new WidgetA { Id = 1, Key = 152 }; var list = new List<WidgetA>(); list.Add(key1); list.Add(key2); list.Add(key3); DataGrid1.ItemsSource = list; }
方式二:链式调用Append并直接赋值
利用Linq的链式调用,将所有Append的结果直接赋值给变量:
private void Window_Loaded(object sender, RoutedEventArgs e) { var key1 = new WidgetA { Id = 1, Key = 52 }; var key2 = new WidgetA { Id = 1, Key = 102 }; var key3 = new WidgetA { Id = 1, Key = 152 }; IEnumerable<WidgetA> list = Enumerable.Empty<WidgetA>() .Append(key1) .Append(key2) .Append(key3); DataGrid1.ItemsSource = list; }
方式三:每次Append后重新赋值给变量
每次调用Append后,将返回的新集合重新赋值给list:
private void Window_Loaded(object sender, RoutedEventArgs e) { var key1 = new WidgetA { Id = 1, Key = 52 }; var key2 = new WidgetA { Id = 1, Key = 102 }; var key3 = new WidgetA { Id = 1, Key = 152 }; IEnumerable<WidgetA> list = Enumerable.Empty<WidgetA>(); list = list.Append(key1); list = list.Append(key2); list = list.Append(key3); DataGrid1.ItemsSource = list; }
额外提示
如果后续需要动态添加/删除元素并让DataGrid自动刷新显示,建议使用ObservableCollection<WidgetA>替代普通集合,它实现了INotifyCollectionChanged接口,集合变化时会自动通知UI更新。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

