繁体   English   中英

无法使用BindingList将行添加到DataGridView

[英]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>

结果是带有行模板的列表,该模板在单击时打开:

WPF数据网格

现在,很可能您将不会像我所显示的那样使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM