【发布时间】:2020-07-14 08:29:31
【问题描述】:
我见过很多类似的问题,但我找不到一个问题/答案或教程,其中清楚地列出了使其工作所需的所有组件。我正在尝试关注 MVVM,但由于这完全是 UI 问题,我并不反对做一些代码隐藏。
我想要达到的目标:
-
ListView.ItemsSource绑定到ObservableCollection<T> - 根据
TextBox过滤ListView中显示的项目 - 过滤器更新为
TextBox中的用户类型
在我的ViewModel 我有这样的东西:
private ObservableCollection<Customer> _customers;
public ObservableCollection<Customer> Customers
{
get { return _customers; }
set
{
_customers= value;
RaisePropertyChanged("Customers");
}
}
private Customer _selected_Customer;
public Customer Selected_Customer
{
get { return _selected_Customer; }
set
{
_selected_Customer= value;
RaisePropertyChanged("Selected_Customer");
}
}
private string _filtered_Name;
public string Filtered_Name
{
get { return _filtered_Name; }
set
{
_filtered_Name = value;
RaisePropertyChanged("Filtered_Name");
}
}
在我的 XAML 中是这样的:
<CollectionViewSource x:Key="cvs"
x:Name="Customer_Details_View"
Source="{Binding Path=Customers}"/>
<TextBox x:Name="Filtered_Name" Text="{Binding Filtered_Name, Mode=TwoWay}"/>
<ListView ItemsSource="{Binding ElementName=Customer_Details_View}"
SelectedItem="{Binding Selected_Customer, Mode=TwoWay}">
我想用以下逻辑过滤我的ObservableCollection<Customer>:Customer.Name.ToLower().Contains(Filtered_Name.ToLower())
如何将TextBox.Text 绑定到CollectionViewSource 或利用CollectionViewSource.Filter 事件来应用上述过滤器?
【问题讨论】: