CollectionViewSource CurrentItem

Я использую CollectionViewSource в диалоговой модели представления, которая имеет различные требования фильтрации, который хорошо работает. Я также поддерживаю эквивалент выбранного пункта в свойстве (SelectedProject), и я задаюсь вопросом, мог ли я / должен покончить с ним, так как Представление будет знать текущий объект. Моя привязка данных похожа:

<ListView  
      ItemsSource="{Binding Projects.View}" 
      IsSynchronizedWithCurrentItem="True"
      SelectedItem="{Binding SelectedProject, Mode=TwoWay}">

Я использую метод set для SelectedProject для упрощения поблочного тестирования, и CurrentItem, кажется, не устанавливаем насколько я вижу. Я также должен бросить его к правильному объекту, когда я хочу использовать его. OTOH, если бы SelectedProject избыточен затем, я проявил бы ему то же уважение как любое другое дублирование и удалил бы его.

Так, как Вы обычно имеете дело с текущим объектом при использовании CollectionViewSource?

10
задан abatishchev 16 March 2012 в 13:28
поделиться

2 ответа

Вы могли бы покончить с SelectedProject, но я бы возражал против этого. Если у вас есть свойство в вашем коде, ясно, что вы делаете. Если у вас его нет, вам нужно будет сделать что-то вроде

CollectionViewSource.GetDefaultView(Projects.View).CurrentItem as Project

, чтобы взаимодействовать с текущим проектом. Я ценю ясность, а не «встроенную». Кроме того, CurrentItem доступен только для чтения, поэтому, если вы когда-нибудь захотите выбрать элемент в ViewModel, это будет невозможно.

7
ответ дан 4 December 2019 в 01:56
поделиться

Вы должны понимать, что SelectedItem из ListView не зависит от ItemsSource. Независимо от того, используете ли вы CollectionViewSource, List или Array, выбранный элемент всегда будет представлять элемент этой коллекции.

Итак, чтобы ответить на ваш вопрос о том, почему ваш SelectedProject не настраивается, я предлагаю вам проверить функциональность установщика на наличие ошибок. Хороший способ узнать, содержит ли привязка какие-либо ошибки, - это проверить наш вывод на наличие сообщений об ошибках привязки во время отладки.

ПРИМЕЧАНИЕ. Если ваш SelectedProject имеет тот же тип, что и элементы в вашем Projects CollectionViewSource, вам не нужно преобразовывать его перед использованием (если вы не сделали SelectedProject типа Object, это также объясняет вашу проблему с настройками).

РЕДАКТИРОВАТЬ: Извините, короткий ответ - нет, это не является избыточным. Наличие переменной, привязанной к текущему элементу, не является избыточным, если вы имеете в виду тестирование. Хороший пример - это когда вы хотите протестировать старую версию SelectedItem с новой. Теперь, если вы обращаетесь только к CollectionViewSource SelectedItem , тогда может быть слишком поздно для сравнения, но с вашей собственной переменной вы можете проверить логику, прежде чем снова ее установить.

1
ответ дан 4 December 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: