我使用Xml文件使用以下代码加载Wpf Datagrid
<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>
&#13;
加载表单后,wpf datagrid将加载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; } }
如果我使用此代码,我会收到类似的异常&#34;当ItemsSource正在使用时,操作无效。使用ItemsControl.ItemsSource访问和修改元素&#34;
可以建议我一个解决方案吗?
谢谢你, Sathish所在。答案 0 :(得分:0)
public void Addfilterrow(string filname,string comments,string src,string dst)
{
AddFilterDataGrid.Items.Add(new AddfilterRow() { filtername = filname, filter0 = parentWindow.filterarr[0]});
}
根据microsoft文档here,Items是ReadOnly属性。您应该使用ItemsSource。
[编辑] 根据您的评论编辑回答。 ItemsSource是一个IEnumerable,因此要么将项目添加到te集合中,要么创建一个新集合。
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
}