Поле со списком WPF, добавление элемента «все параметры» при привязке к наблюдаемой коллекции - PullRequest
0 голосов
/ 06 января 2011

Итак, у меня есть объект, который имеет наблюдаемую коллекцию.В большинстве мест, которые я связываю с этой коллекцией, я хочу, чтобы пользователь выбирал только один элемент.Но в одном месте я хочу, чтобы в поле со списком была включена опция «все элементы».

Можно ли сделать это просто с помощью xaml converter?

Кажется, что сделать это в модели представления было быХорошая идея, но на самом деле это очень сложная задача для создания объекта зависимости, в основном связывающего коллекцию, состоящую из двух объектов, для события on change, когда конвертер xaml просто работает.

Но я всегда чувствую, что конвертеры xaml должныбыть универсальным и многократно используемым, где в этом случае конвертер xaml будет более чем единичным.

Конечно, третьим вариантом будет создание единого списка для пользовательского интерфейса в объекте, который содержит стандартную наблюдаемую коллекцию,Но это, кажется, смешивает логику и представление таким образом, что мне неудобно.

Ответы [ 2 ]

4 голосов
/ 06 января 2011

Взгляните на CompositeCollection . Это позволяет объединять несколько коллекций в одну коллекцию - что-то вроде XAML-эквивалента LINQ Concat . Он реализует INotifyCollectionChanged, поэтому он должен иметь возможность реагировать на изменения, если некоторые из его внутренних коллекций являются ObservableCollections.

CompositeCollection также позволяет добавлять отдельные элементы, поэтому вам даже не нужно будет оборачивать ваши "Все элементы" в собственную коллекцию. (Вместо этого вы должны обернуть коллекции в CollectionContainer. См. Примеры на странице документации CompositeCollection.)

1 голос
/ 06 января 2011

У меня была похожая потребность, и я решил использовать решение, рассмотренное в этой статье: Как выбрать значение NULL / None в ComboBox / ListBox / ListView

Вы можете заменить строку «(Нет)» в строке 98 на «Все» или что-то подобное.Затем просто добавьте логику в вашу ViewModel, чтобы обрабатывать нулевое значение как «Все» любым подходящим способом.Немного раздражает наличие дополнительного класса, но он делает код намного чище, если вам это нужно в нескольких местах.

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