контрол и ListView
От: VjcheslavV  
Дата: 21.03.23 13:55
Оценка:
Такая история — есть контрол в ListView с привязками
1) можно ли дополнительно привязать свойства контрола к данным соседей (сверху и снизу)?
2) как из обработчика события контрола узнать в какой он строке.

Заранее спасибо!!!
Re: контрол и ListView
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 21.03.23 14:53
Оценка:
Можно, то можно но нужно ли? Почему бы не создать свойства VM (идеальный юзкейс в вашем случае) и не привязываться к ним? Все эти ивенты и зависимость от конкретных элементов UI ничем хорошим не заканчивается. Попробуйте для себя MVVM безо всяких фрейморков.
Re: контрол и ListView
От: Mr.Delphist  
Дата: 21.03.23 19:02
Оценка:
Здравствуйте, VjcheslavV, Вы писали:

VV>Такая история — есть контрол в ListView с привязками


Какой UI-фреймворк? WinForms, WPF, UWP, WinUI, Avalonia?
Re[2]: контрол и ListView
От: VjcheslavV  
Дата: 22.03.23 05:04
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Какой UI-фреймворк? WinForms, WPF, UWP, WinUI, Avalonia?


WPF
Re[2]: контрол и ListView
От: VjcheslavV  
Дата: 22.03.23 05:31
Оценка:
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒, Вы писали:

尿Ǥ푙>Можно, то можно но нужно ли? Почему бы не создать свойства VM (идеальный юзкейс в вашем случае) и не привязываться к ним? Все эти ивенты и зависимость от конкретных элементов UI ничем хорошим не заканчивается. Попробуйте для себя MVVM безо всяких фрейморков.


Смотрел https://metanit.com/sharp/wpf/22.2.php как-то тоже неудобняк в соседние элементы лазить... или я не тот пример смотрел?
Re[3]: контрол и ListView
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 22.03.23 10:05
Оценка:
Идеальный пример — SelectedPhone — свойство VM которое обновляется при измении выбора в листе и опрашивается при заполнении деталей. никаких зависимостей от View level elements.
Re[4]: контрол и ListView
От: VjcheslavV  
Дата: 22.03.23 10:35
Оценка:
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒, Вы писали:

尿Ǥ푙>Идеальный пример — SelectedPhone — свойство VM которое обновляется при измении выбора в листе и опрашивается при заполнении деталей. никаких зависимостей от View level elements.

ну и как это к моей задаче присобачить — у меня вобще не будет выделения ... и при произвольном контроле нужно обновить свойства верхнего и нижнего контролов...
Re[5]: контрол и ListView
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 22.03.23 10:59
Оценка:
опишите задачу подробней.
Re[3]: контрол и ListView
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 22.03.23 11:04
Оценка:
В-общем, я бы посоветовал почитать книжку по WPF, сначала про общие моменты WPF 4.5 Unleashed (там мало что поменялось с тех пор) а потом про M-V-VM, я бы не советовал влезать во фреймворки на вашем уровне. При всей стройности архитектуры WPF — это не та технология, которую можно взять на хапок, скорее вы просто наломаете дров как в ваших предидущих 185 постах.
Re[6]: контрол и ListView
От: VjcheslavV  
Дата: 22.03.23 11:08
Оценка:
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒, Вы писали:

尿Ǥ푙>опишите задачу подробней.


В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...
Re[7]: контрол и ListView
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 22.03.23 11:23
Оценка:
это тривиальная задача, вам нужно создать темплейты для аятемов которые бы включали ваш контрол:

https://stackoverflow.com/questions/20530010/custom-listviewitem-in-listview
Re[8]: контрол и ListView
От: VjcheslavV  
Дата: 22.03.23 11:54
Оценка:
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒, Вы писали:

尿Ǥ푙>это тривиальная задача, вам нужно создать темплейты для аятемов которые бы включали ваш контрол:


尿Ǥ푙>https://stackoverflow.com/questions/20530010/custom-listviewitem-in-listview


</DataTemplate>? и чем он поможет?
как-то ответ совсем не по теме ....
Там нужно некоторые свойства привязывать на строку раньше и строку позже — по ссылке вроде другая задача...
Отредактировано 22.03.2023 12:01 VjcheslavV . Предыдущая версия .
Re[7]: контрол и ListView
От: Mr.Delphist  
Дата: 22.03.23 21:42
Оценка:
Здравствуйте, VjcheslavV, Вы писали:

VV>В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...


Можно попробовать завязаться на ItemContainerGenerator.ContainerFromIndex, но как показывает практика, обычно это ведёт к заметной даже на глаз деградации скорости отрисовки.

Если по уму, я бы создавал искомую взаимосвязь на уровне viewmodel, когда заполняется коллекция элементов для биндинга на ListView. Т.е. у каждого элемента должны быть ссылки на prev и next, которые создаются/исправляются при изменении коллекции — эдакий двусвязный список. Тогда можно достаточно дёшево делать биндинги для изучения предыдущей и последующей строк и использования их значений в валидаторах и т.п. Главное про null safety не забыть.
Re[7]: контрол и ListView
От: karbofos42 Россия  
Дата: 23.03.23 05:29
Оценка: +1
Здравствуйте, VjcheslavV, Вы писали:

VV>В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...


Это задача для ViewModel, а не View.
Никакие контролы искать не нужно.
Контрол меняет свойство в соответствующей ViewModel и она дальше какую-то логику реализует, соседи на неё подписываются и меняют свои значения или ещё как-то это происходит.
Попытки решения подобных вещей через View обычно приводят к печальным последствиям.
Через какое-то время понадобится подключить какую-нибудь виртуализацию для списка, внезапно окажется, что уже не для всех элементов генерируются контролы и искать некого будет.
Re[8]: контрол и ListView
От: VjcheslavV  
Дата: 23.03.23 06:37
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Если по уму, я бы создавал искомую взаимосвязь на уровне viewmodel, когда заполняется коллекция элементов для биндинга на ListView. Т.е. у каждого элемента должны быть ссылки на prev и next, которые создаются/исправляются при изменении коллекции — эдакий двусвязный список. Тогда можно достаточно дёшево делать биндинги для изучения предыдущей и последующей строк и использования их значений в валидаторах и т.п. Главное про null safety не забыть.


Учитывая как хорошо в C# сылки на коллекции работают — лучше использовать глобальный список и индексы элементов в нём...
Re[7]: контрол и ListView
От: VjcheslavV  
Дата: 23.03.23 07:18
Оценка:
блин... только сейчас понял что MVVM не подайдёт ... код не мой я его просто дописываю а там из -за того что контролы не в xml а вручную создаётся то DataContext слетает в null.
Отредактировано 23.03.2023 8:15 VjcheslavV . Предыдущая версия .
Re[8]: контрол и ListView
От: Mr.Delphist  
Дата: 27.03.23 13:57
Оценка:
Здравствуйте, VjcheslavV, Вы писали:

VV>блин... только сейчас понял что MVVM не подайдёт ... код не мой я его просто дописываю а там из -за того что контролы не в xml а вручную создаётся то DataContext слетает в null.


MVVM вовсе не запрещает создавать контролы в рантайме из кода — это именно про идею разделения обязанностей между моделью, вьюшкой и вью-моделью
Re[9]: контрол и ListView
От: Mr.Delphist  
Дата: 27.03.23 14:00
Оценка:
Здравствуйте, VjcheslavV, Вы писали:

VV>Учитывая как хорошо в C# сылки на коллекции работают — лучше использовать глобальный список и индексы элементов в нём...


Отлично всё работает. Надо лишь понимать ограничения реализации: например, если используется виртуализация, то далеко не для каждого item во viewmodel будет создан физический контрол на view (а если есть сейчас, то нет гарантии что через пять минут он будет всё ещё жив, а если жив — что соответствует всё тому же item как и раньше)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.