![](/img/trans.png)
[英]Adding new row in DataGridView doesn't add to BindingList<T>
[英]Can't add row to DataGridView with BindingList
我正在编写C#WPF应用程序。 我是新手,尝试将列表加载到DataGrid失败。 然后,我使用DataGridView将WinForm添加到WPF解决方案中。 当我将列表加载到DataGridView.DataSource时,即使AllowUserToAddRows属性为True,我也没有'*'行来添加新行,但我将列表转换为BindingList,现在仍然有新行。 我到处搜索,但每个人都说BindingList解决了他们的问题。 是因为它是WPF应用程序中的WinForm吗? 我该如何解决?
专注于使用WPF,winforms插件可以工作,但是由于过程的特殊性,人们发现它并不是最佳选择。
这是我创建的一个基本示例,该示例绑定到公共列表数组。 您可以使用ObservableCollection或简单的通用列表。 在WPF中,主要是在xaml中定义外观,然后将数据绑定到该外观。 ItemsSource
是将项目放入要显示的数据网格的标准方法。
Window.Resources>
<model:People x:Key="People">
<model:Person First="Joe" Last="Smith" Phone="303-555 5555" />
<model:Person First="Mary" Last="Johnson" Phone="720-555 5555" />
<model:Person First="Frank" Last="Wright" Phone="202-555 5555" />
</model:People>
</Window.Resources>
<DataGrid AutoGenerateColumns="False"
ItemsSource="{StaticResource People}">
<DataGrid.Columns>
<DataGridTextColumn Header="First" Binding="{Binding First}" />
<DataGridTextColumn Header="The Name" Binding="{Binding Last}" />
<DataGridTextColumn Header="Phone Number" Binding="{Binding Phone}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Phone}" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
结果是带有行模板的列表,该模板在单击时打开:
现在,很可能您将不会像我所显示的那样使用Xaml中定义的静态资源进行绑定,而是将一个实例放置一个实现INotifyPropertyChanged
并创建People属性的VM(ViewModel)类实例。
在最有可能在后面的代码中将VM实例化之后,可以从页面的数据上下文访问VM。
public MyPage()
{
InitializeComponent();
DataContext = new MyPageViewModel(); // Contains logic for the 'People' Property of a list of people.
}
}
然后,在上面的示例中,将绑定更改为绑定到页面的数据上下文,该绑定是从页面继承的,因为未为datagrid控件设置任何内容 。
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding People}">
有关完整的MVVM示例,请参阅我的博客Xaml:ViewModel主页的实例化和加载策略,以简化绑定
好的,我已修复它,绑定对象的默认构造函数不是公共的。 并在途中将其与带有ItemsSource的WPF DataGrid绑定(这很奇怪,因为我在拥有列标题和列表中项目数的行之前尝试了它,但是行中没有数据。 。但是如果可以,请不要触摸它:))谢谢大家。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.