【问题标题】:DataGrid add editable rows WFPDataGrid 添加可编辑行 WFP
【发布时间】:2014-05-28 06:53:09
【问题描述】:

我有一个包含 2 列的数据网格,没有初始数据,我需要让用户能够根据需要添加列。

我所做的是添加一个 DataGrid、一个用于添加行的按钮和一个代表该行的类:

Xaml:

        <DataGrid AutoGenerateColumns="False" Height="51" HorizontalAlignment="Left" Margin="374,354,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="204" CanUserAddRows="True" AreRowDetailsFrozen="False" CanUserDeleteRows="True" ItemsSource="{Binding FilterBinding}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Key" IsReadOnly="False" Binding="{Binding Key}" ></DataGridTextColumn>
            <DataGridTextColumn Header="Value" IsReadOnly="False" Binding="{Binding Value}" ></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="503,330,0,0" Name="button5" VerticalAlignment="Top" Width="75" Click="button5_Click" />

MainWindow.xaml.cs:

private void button5_Click(object sender, RoutedEventArgs e)
    {
        var data = new FilterItem { key = "Key", value = "Value" };
        dataGrid1.Items.Add(data);
    }

FilterItem.cs:

public class FilterItem
{
    public string key { get; set; }
    public string value { get; set; }
}

问题是添加的行不可编辑,双击单元格会引发异常:

此视图不允许使用“EditItem”。 (InvalidOperationException 未处理)

我做错了什么?

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    我猜是因为访问集合对象的属性是只读的。有关信息,请参见此处:MSDN: ItemsControl.Items Property

    我会为这些物品创建一个商店:

    private ObservableCollection<FilterItem> _data = new ObservableCollection<FilterItem>();
    
    public ObservableCollection<FilterItem> Data
    {
      get { return _data; }
    }
    

    现在您将您的DataGrid 绑定到此商店,例如:

    <DataGrid ... ItemsSource="{Binding Data, ElementName=window}">
    

    最后是你的按钮:

    _data.Add(new FilterItem());
    

    这样您就可以在窗口中创建一个存储并将 DataGrid 绑定到该存储。每次更改项目集合时,DataGrid 都会显示新值,您可以更改项目。

    我建议为您的 FilterItem 实施 INotifyPropertyChanged。这样,每次您更改项目时,都会通知DataGrid

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多