我想基于文本框中的文本过滤gridview,这是我的代码:
public Page1()
{
InitializeComponent();
var xElem = XElement.Load(AppDomain.CurrentDomain.BaseDirectory + @"\\Data\\Products.xml");
this.defaultView = CollectionViewSource.GetDefaultView(xElem);
this.defaultView.Filter = w => ((string)w).Contains(freeText.Text); // Null ref exception
productGrid.ItemsSource = this.defaultView;
}
private void SearchProducts(object sender, RoutedEventArgs e)
{
// Filter GridView
this.defaultView.Refresh();
}
上面的代码不起作用,我在第7行得到一个NullReference异常。我的问题是,是否可以直接使用XML,就像我在上面的代码中做的那样?如果是这样,怎么样?
答案 0 :(得分:2)
您可能无法获得根元素的默认视图,但您可以获取子元素,因此请修改为以下示例
您还需要转换为XElement而不是字符串才能指定过滤器
var xElem = XElement.Load(AppDomain.CurrentDomain.BaseDirectory + @"\\Data\\Products.xml");
this.defaultView = CollectionViewSource.GetDefaultView(xElem.Elements("product"));
this.defaultView.Filter = w => ((XElement)w).ToString().Contains(freeText.Text);
productGrid.ItemsSource = this.defaultView;
假设xml如下所示
<products>
<product>...</product>
...
<product>...</product>
</products>