WPF Привязка к коллекции с ограничением - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть наблюдаемая коллекция объектов.Я хочу связать 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 ]

4 голосов
/ 22 февраля 2011

Вы должны использовать фильтрацию

0 голосов
/ 22 февраля 2011

Я думаю, вы могли бы добиться этого в XAML, добавив DataTrigger в стиль вашего GridView.Как то так:

<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>
0 голосов
/ 22 февраля 2011

Я предпочитаю использовать LINQ.

var result = YourCollection.Where(p => p.x.HasValue).ToObservableCollection();

Но вы должны написать собственное расширение для преобразования в ObservableCollection.

public static ObservableCollection<T> ToObservableCollection<T>
              (this IEnumerable<T> source)
{
    if (source == null)
        throw new ArgumentNullException("source");

    return new ObservableCollection<T>(source);
}

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...