我有一个完美的视图和ViewModel。我最近添加了一个AutocompleteBox(可在WPF Toolkit中找到),它允许用户快速查找项目。
我的观点如下:
我的问题是:当用户选择他希望从下拉菜单中看到的项目时,如何过滤我的ItemsControl?
我的代码到目前为止在XAML中绑定数据:
<toolkit:AutoCompleteBox Height="25" Width="400"
Foreground="AliceBlue"
ItemsSource="{Binding People.View}"
ValueMemberPath="Name"
Text="{Binding Name}"
IsTextCompletionEnabled="True"
FilterMode="Contains"
Background="#303030">
<toolkit:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<Grid Width="360" HorizontalAlignment="Left">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="300">
<TextBlock Text="{Binding Name}" FontWeight="SemiBold" Foreground="#25A0DA"
FontSize="14" Width="300"/>
<TextBlock Text="{Binding Status}" FontWeight="Normal" Foreground="White"
FontSize="10" Width="300"/>
</StackPanel>
</Grid>
</DataTemplate>
</toolkit:AutoCompleteBox.ItemTemplate>
</toolkit:AutoCompleteBox>
<ItemsControl x:Name="tStack" Grid.Column="0" Grid.Row="1"
ItemsSource="{Binding People.View}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
BorderThickness="0.5">
</ItemsControl>
itemsControl是样式化的,其中的项目格式也是模板化/样式化的,但是太长且没有建设性,无法在此处发布。
答案 0 :(得分:0)
从您的viewmodel中绑定Name
的{{1}}属性设置器,您必须过滤支持toolkit:AutoCompleteBox.Text
i,e Collectionview
ItemsSource
的ObservableCollection {1}}。
如果你有Collectionsource,那么你可以像下面那样应用过滤器:
ItemsControl
从名字属性的Setter你可以打电话给ICollectionView _peopleView = CollectionViewSource.GetDefaultView(peoples);
_peopleView .Filter = PeopleFilter
private bool PeopleFilter(object item)
{
People people= item as People;
return people.Name.Contains( _filterString ); //Here filter string will be your Name prperty value
}
;应用过滤器
由于