Использование текстового поля для фильтрации списка, привязанного к XML - PullRequest
0 голосов
/ 13 мая 2011

enter code here Привет, ребята, я новичок в программировании wpf, и мне трудно фильтровать представление списка, когда пользователь вводит текст в поле.при попытке отфильтровать все, что я получаю, это черный список ... Я полагаю, что это вызвано тем, что часть фильтра является атрибутом узла, и я не уверен, как его использовать для фильтрации

Пример я пытаюсь фильтровать, используя baseRef Item

Заранее спасибо

Вот мой код

    private bool FilterItem(object obj)
    {
        Item item = obj as Item;
        if (item == null) return false;

        string textFilter = Filtertxt.Text;

        if (textFilter.Trim().Length == 0) return true; // the filter is empty - pass all items

        // apply the filter
        if (item.ItemNum.ToLower().Contains(textFilter.ToLower())) return true;
        return false;
    }

    private void Filtertxt_TextChanged(object sender, TextChangedEventArgs e)

    {
        if (!this.IsInitialized) return;    // get out of here if the window is not initialized


        /// Get the default view from the listview
        ICollectionView view = CollectionViewSource.GetDefaultView(lviewItemsList.ItemsSource  );

        view.Filter = null;
        view.Filter = new Predicate<object>(FilterItem);
    }
My Xml struct 

    <Item quantity="0" baseRef="2" desc="BLANK Item, ">
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
    </Item>
    <Item quantity="0" baseRef="2" desc="BLANK Item, ">
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
        <Material selected="0" ref="2" color="" />
    </Item>

Xml анализируется с использованием xpath в xaml

<ListView Name="lviewItemsList" 
           MouseDoubleClick="DataGrid_MouseDoubleClick"
              ItemsSource="{Binding Source={StaticResource plData}, XPath=/PickList/Items/Item}" 
              IsSynchronizedWithCurrentItem="True" Margin="87,32,63.9999999999991,61"
      KeyboardNavigation.TabNavigation="Continue" Grid.Row="1"  >
        <ListView.View>
            <GridView x:Name="Itemlist" ColumnHeaderContainerStyle="{StaticResource GridHeaderStyle}">
                <GridViewColumn  Header="Item" DisplayMemberBinding="{Binding XPath=@baseRef}"/>
                <GridViewColumn  Header ="Qty" CellTemplate="{StaticResource Qty}"/>
                <GridViewColumn Header="Finish" CellTemplate="{StaticResource ItemFin}" Width="0"/>
                <GridViewColumn Header="Description" DisplayMemberBinding="{Binding XPath=@desc}"/>
            </GridView>
        </ListView.View>
    </ListView>

enter code here

ItemNum является классом элемента .. я пытался передать его как объект .. Я действительно потерян здесь

internal class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void FirePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string itemNum = "";
    public string ItemNum
    {
        get { return itemNum; }
        set { itemNum = value; FirePropertyChanged("ItemNum"); }
    }
    private string itemDesc = "";
    public string ItemDesc 
    {
        get { return itemDesc; }
        set { itemDesc = value; FirePropertyChanged("ItemDesc "); }
    }

    internal class ItemCollection : ObservableCollection<Item>
    {
    }
}

} ​​* * тысяча двадцать-два

1 Ответ

0 голосов
/ 13 мая 2011

Кажется, вы напрямую связываетесь с XmlDocument, который содержит элемент с именем Item, а затем попытаетесь отфильтровать его, как если бы вы определили класс, названный Item. Это не правильно, объект, который получает FilterItem(), это просто XmlElement. Как фреймворк должен выяснить, что вы хотите преобразовать его в какой-то класс с таким же именем? (И как это сделать преобразование, если ему удалось выяснить, что вы хотите этого?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...