|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Есть у меня такой класс: Код: c# 1. 2. 3. 4. 5. 6.
Потом я создаю ObservableCollection<MyInfo> Data { get; set; } и делаю биндинг к ListView (у которого есть колонка с чекбоксами). Как теперь для кнопки менять IsEnabled в зависимости от того, есть галка в колонке с чекбоксами или нет. В рамках MVVM. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 15:59 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Кнопка-то где? В темплейте строки или вообще вне ListView? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 16:43 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Да, кнопка вне ListView... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 16:48 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Ну можно привязать её IsEnabled к Linq-выражению с Any, а при изменении чекбокса генерировать событие PropertyChanged для этого свойства. События CheckedEvent и UnheckedEvent - всплывающие - можно ловить их централизованно на уровне листбокса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:04 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Тогда такой вопрос, немного отвлеченный от темы: как для всей коллекции (списка) элементов подписаться на изменения свойства? Пусть одного IsChecked в данном случае. То что, класс MyInfo будет реализовывать интерфейс INotifyPropertyChanged это понятно... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:13 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Если хочется подписываться на события самой модели - кто мешает? Можно через CollectionChanged (и смотреть добавленные элементы), либо просто сделать собственное централизованное добавление в коллекцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:38 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Я имею ввиду изменение значения одного из свойств коллекции/списка... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:49 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
И я вроде о том же. В чем конкретно вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:50 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
зачем тут ListView? когда достаточно ItemsControl? Еще я для себя сделал UniversalBox, где в качестве контейнера может выступать любой из существующих ContentControl'ов, что довольно удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 18:33 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Roman Mejtesзачем тут ListView? когда достаточно ItemsControl?почему ты так думаешь? Может ему нужно ширину столбцов менять или, скажем, прямоугольное выделение делать.... В контексте вопроса, в общем-то, без разницы Roman MejtesUniversalBox, где в качестве контейнера может выступать любой из существующих ContentControl'овА в чем удобство большее, чем шаблон Item-а? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 19:00 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Shocker.ProRoman MejtesUniversalBox, где в качестве контейнера может выступать любой из существующих ContentControl'овА в чем удобство большее, чем шаблон Item-а? Визуальное дерево получается короче ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 21:35 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
ListView здесь нужен в явном виде не нужен, но для привычного внешнего вида оставлен. А по теме, сделал так: во ViewModel'е в конструкторе я в цикле foreach подписываюсь на событие изменения свойства объекта, в обработчике меняю свойство ViewModel'и IsCheckedLV, которое управляет поведением кнопки. Так же я во ViewModel'и же обрабатываю событие CollectionChanged, в обработчике которого вызываю все тот же метод, определяющий количество чекнутых галок и меняющий свойство IsCheckedLV. Работает. Хотел для идеальности передавать в метод новые элементы, чтобы только для них подписываться на изменения Код: c# 1.
но тут возникла ошибка приведения типов... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 13:44 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
неудивительно, оно ведь не является тем, к чему вы хотите привести. а зачем вам приведение к какому-то типу, если NewItems реализует IEnumerable? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 13:56 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Например, чтобы передать эти элементы в метод, который будет Код: c# 1.
То есть - в начале метод бы принимал всю коллекцию, а потом - только добавленные элементы. Ну так планировалось) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:14 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Qwe.Qwe1метод, который будет Data.ForEachтак чем не устраивает обычный foreach? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:41 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:48 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Всё грустно.... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:56 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Итого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 15:18 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
вообще использовать foreach для e.NewItems у ObsevableCollection бессмысленно, по причине того, что в ней вообще нет методов "групповой" вставки и удаления. А классы унаследованные от ICollectionView, который оборачивают коллекцию при любом связывании с UI строго проверяют эти значения на то, чтоб они не были больше или равны 1ницы (0 или 1). Я был сам этому удивлён, когда исследовал работу CollectionView'ров с целью запилить свои с блекджеком и всем остальным. Короче говоря, в e.NewItems технически не может быть больше 1 элемента, а если они там окажутся, то мы получим исключение System.NotSupportedException' Additional information: Range actions are not supported. (при условии, что данная ObservableCollection<T> связана с ItemsControl'ом) По этому, вся эта возня во круг foreach пустая трата времени, вы ожидаете увидеть там несколько элементов, но их всегда будет меньше 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 19:03 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Да, это, конечно, недостаток ObservableCollection. Тем не менее, ты работаешь с интерфейсом IEnumerable, а не с ObservableCollection, поэтому стоит все-таки сделать цикл, чтобы избежать плохообнаруживаемых проблем с потенциальным рефакторингом. Кстати, я делал обертку над ObservableCollection, которая имеет AddRange и выдает единственный PropertyChanged. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 19:30 |
|
ListView с checkbox и событие
|
|||
---|---|---|---|
#18+
Shocker.ProДа, это, конечно, недостаток ObservableCollection. Тем не менее, ты работаешь с интерфейсом IEnumerable, а не с ObservableCollection, поэтому стоит все-таки сделать цикл, чтобы избежать плохообнаруживаемых проблем с потенциальным рефакторингом. Кстати, я делал обертку над ObservableCollection, которая имеет AddRange и выдает единственный PropertyChanged. проблема не в ObservableCollection, а в ItemContainerGenerator'е, создать свою коллекцию имплантирующую INotifyCollectionChanged нет ни каких проблем, но при использовании такой коллекции в качество источника для UI будет ошибка, при вставке более 1 элемента. Так как, когда мы связываем нашу коллекцию со свойством ItemsSource, ItemsControl создает View'у для этой коллекции и задает её в качестве Items, к котором потом подписывается генератор контейнеров. И всё это добро умеет работать только по элементно. а само событие CollectionChanged поддерживает множественные изменения, для этого там даже конструктор соответствующий есть и в чистом коде, без UI всё должно работать как обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 21:01 |
|
|
start [/forum/topic.php?fid=21&fpage=11&tid=1440656]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 242ms |
total: | 417ms |
0 / 0 |