DataGrid添加可编辑的行WFP

时间:2014-05-28 06:53:09

标签: c# wpf xaml datagrid

我有一个包含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; }
}

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

  

&#39; EditItem&#39;此视图不允许使用此视图。 (InvalidOperationException未处理)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我想这是因为访问集合对象的属性是只读的。有关信息,请参阅此处: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