我正在使用一个 Xml 文件使用以下代码加载 Wpf 数据网格
<Window.Resources>
<XmlDataProvider x:Key="FilterData"
Source="E:/WPF12/Main27-02-15/IntelligraphicsSniffer24-2-15/Intelligraphics Sniffer/Resources/XMLFile2.xml" XPath="NewDataSet"/>
</Window.Resources>
<DataGrid x:Name="AddFilterDataGrid" Height="220" GridLinesVisibility="None" DataContext="{StaticResource FilterData }" AutoGenerateColumns="False"
ItemsSource="{Binding XPath=Filter}" >
<DataGrid.Columns>
<DataGridTextColumn
Header="Name"
Binding="{Binding XPath=name}"/>
<DataGridTextColumn
Header="filter0"
Binding="{Binding XPath=filter0}"/>
<DataGridTextColumn
Header="filter1"
Binding="{Binding XPath=filter1}" Visibility="Hidden" />
</DataGrid.Columns> </DataGrid>
示例 XML 文件为:
<NewDataSet>
<Filter>
<name>one</name>
<filter0>12</filter0>
<filter1>15</filter1>
</Filter>
<Filter>
<name>sathish </name>
<filter0>999</filter0>
<filter1>robo</filter1>
</Filter>
</NewDataSet>
加载表单后,WPF 数据网格将使用 XML 文件加载。 它工作正常。 但我的要求是在单击按钮后将行添加到代码中的数据网格。
我为按钮单击事件编写了代码,如下所示
public void Addfilterrow(string filname,string comments,string src,string dst)
{
AddFilterDataGrid.Items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
}
类 AddfilterRow 是 :
public class AddfilterRow
{
public string filtername { get; set; }
public UInt16 filter0 { get; set; }
public UInt16 filter1 { get; set; } }
如果我使用此代码,则会收到类似这样的异常"使用ItemsSource时操作无效。使用 ItemsControl.ItemsSource 访问和修改元素"
可以建议我一个解决方案吗?
谢谢萨蒂什。
public void Addfilterrow(string filname,string comments,string src,string dst)
{
AddFilterDataGrid.Items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
}
根据此处的 Microsoft 文档,Items 是只读属性。您应该改用 ItemsSource。
[编辑] 根据您的评论编辑答案。ItemsSource 是一个 IEnumerable,因此要么将项目添加到集合中,要么创建一个新集合。
public void Addfilterrow(string filname,string comments,string src,string dst)
{
ICollection<AddFilterRow> items = AddFilterDataGrid.ItemsSource as ICollection<AddFilterRow> ;
if(items==null)
return;
items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
AddFilterDataGrid.ItemsSource = items
}