WPF绑定到带约束的集合

时间:2011-02-22 06:47:09

标签: c# wpf binding

我有一个可观察的对象集合。 我希望将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");

       }
    }

3 个答案:

答案 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>