无法使用BindingList向DataGridView添加行

时间:2015-08-31 14:59:33

标签: c# wpf list datagridview bindinglist

我正在编写C#WPF应用程序。我是新手并尝试将List加载到DataGrid并失败。然后我使用DataGridView为我的WPF解决方案添加了一个WinForm。 当我将列表加载到DataGridView.DataSource时,我没有' *'即使AllowUserToAddRows属性为True,我添加新行,我将List转换为BindingList,现在仍然是新行。我到处搜索,但每个人都说BindingList解决了他们的问题。是因为它是WPF应用程序中的WinForm吗? 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

专注于使用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 DataGrid

现在很可能你不会像我所示那样使用Xaml中定义的静态资源进行绑定,而是将一个实现INotifyPropertyChanged的VM(ViewModel)类实例放置并创建一个 People < / em> property。

可以从页面的数据上下文中访问VM,因为它很可能在后面的代码中实例化,例如

public MyPage()
{
     InitializeComponent();
     DataContext = new MyPageViewModel(); // Contains logic for the 'People' Property of a list of people.

}

}

然后在上面的示例中更改绑定以绑定到页面的datacontext ,这是从页面中删除的,因为没有为数据网格控件设置

<DataGrid AutoGenerateColumns="False"
          ItemsSource="{Binding People}">

有关完整的MVVM示例,请参阅我的博客Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding

答案 1 :(得分:0)

好的我修复了它,绑定对象的默认构造函数不公开。 在途中,我使用ItemsSource将其与WPF DataGrid绑定(这很奇怪,因为我在使用列标题之前尝试了它,列表中项目数量的行,但行中没有数据。但如果它有效,请不要碰它:)) 谢谢大家。