我有一个可观察的对象集合。 我希望将gridview绑定到这个可观察的集合。但是存在一个约束,即只有属性x具有值a的对象必须绑定
怎么做?
我使用CollectionView和过滤器。对于其他人的好处,代码如下
解决方案:
public class CustomerViewModel
{
public ObservableCollection<Customer> Customers
{
get;
set;
}
private ICollectionView _filteredCustomerView;
public ICollectionView FilteredCustomers
{
get { return _filteredCustomerView; }
}
public CustomerViewModel()
{
this.Customers= new ObservableCollection<Customer>();
Customers= GetCustomer();
_filteredCustomerView= CollectionViewSource.GetDefaultView(Customers);
_filteredCustomerView.Filter = MyCustomFilter;
}
private bool MyCustomFilter(object item)
{
Customer cust = item as Customer;
return (cust.Location == "someValue");
}
}
答案 0 :(得分:4)
您应该使用filtering
答案 1 :(得分:0)
我更喜欢使用LINQ。
var result = YourCollection.Where(p => p.x.HasValue).ToObservableCollection();
但是你应该编写自己的extension来转换为ObservableCollection。
public static ObservableCollection<T> ToObservableCollection<T>
(this IEnumerable<T> source)
{
if (source == null)
throw new ArgumentNullException("source");
return new ObservableCollection<T>(source);
}
祝你好运!
答案 2 :(得分:0)
我认为您可以通过在GridView的样式上放置DataTrigger来在XAML中实现此目的。像这样:
<DataGrid>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<DataTrigger Binding="{Binding IsFiltered}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IsFiltered}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style>
</DataGrid.Resources>
</DataGrid>