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>
{
}
}
} * * тысяча двадцать-два