WPF - 以XML作为输入的CollectionViewSource.GetDefaultView(XML)

时间:2014-06-17 06:40:20

标签: xml wpf

我想基于文本框中的文本过滤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,就像我在上面的代码中做的那样?如果是这样,怎么样?

1 个答案:

答案 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>