Такая история — есть контрол в ListView с привязками
1) можно ли дополнительно привязать свойства контрола к данным соседей (сверху и снизу)?
2) как из обработчика события контрола узнать в какой он строке.
Можно, то можно но нужно ли? Почему бы не создать свойства VM (идеальный юзкейс в вашем случае) и не привязываться к ним? Все эти ивенты и зависимость от конкретных элементов UI ничем хорошим не заканчивается. Попробуйте для себя MVVM безо всяких фрейморков.
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>Можно, то можно но нужно ли? Почему бы не создать свойства VM (идеальный юзкейс в вашем случае) и не привязываться к ним? Все эти ивенты и зависимость от конкретных элементов UI ничем хорошим не заканчивается. Попробуйте для себя MVVM безо всяких фрейморков.
Идеальный пример — SelectedPhone — свойство VM которое обновляется при измении выбора в листе и опрашивается при заполнении деталей. никаких зависимостей от View level elements.
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>Идеальный пример — SelectedPhone — свойство VM которое обновляется при измении выбора в листе и опрашивается при заполнении деталей. никаких зависимостей от View level elements.
ну и как это к моей задаче присобачить — у меня вобще не будет выделения ... и при произвольном контроле нужно обновить свойства верхнего и нижнего контролов...
В-общем, я бы посоветовал почитать книжку по WPF, сначала про общие моменты WPF 4.5 Unleashed (там мало что поменялось с тех пор) а потом про M-V-VM, я бы не советовал влезать во фреймворки на вашем уровне. При всей стройности архитектуры WPF — это не та технология, которую можно взять на хапок, скорее вы просто наломаете дров как в ваших предидущих 185 постах.
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>опишите задачу подробней.
В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...
</DataTemplate>? и чем он поможет?
как-то ответ совсем не по теме ....
Там нужно некоторые свойства привязывать на строку раньше и строку позже — по ссылке вроде другая задача...
Здравствуйте, VjcheslavV, Вы писали:
VV>В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...
Можно попробовать завязаться на ItemContainerGenerator.ContainerFromIndex, но как показывает практика, обычно это ведёт к заметной даже на глаз деградации скорости отрисовки.
Если по уму, я бы создавал искомую взаимосвязь на уровне viewmodel, когда заполняется коллекция элементов для биндинга на ListView. Т.е. у каждого элемента должны быть ссылки на prev и next, которые создаются/исправляются при изменении коллекции — эдакий двусвязный список. Тогда можно достаточно дёшево делать биндинги для изучения предыдущей и последующей строк и использования их значений в валидаторах и т.п. Главное про null safety не забыть.
Здравствуйте, VjcheslavV, Вы писали:
VV>В LISTWiev в одну из колонок вставлен свой контрол DataTime , его будут изменять кроме первой строчки , причём список без сортировки и нельзя чтобы время шло не по порядку и не было в будущем ... В контроле есть MinVal МахVal его скоро переделаю в свойство зависимости...
Это задача для ViewModel, а не View.
Никакие контролы искать не нужно.
Контрол меняет свойство в соответствующей ViewModel и она дальше какую-то логику реализует, соседи на неё подписываются и меняют свои значения или ещё как-то это происходит.
Попытки решения подобных вещей через View обычно приводят к печальным последствиям.
Через какое-то время понадобится подключить какую-нибудь виртуализацию для списка, внезапно окажется, что уже не для всех элементов генерируются контролы и искать некого будет.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Если по уму, я бы создавал искомую взаимосвязь на уровне viewmodel, когда заполняется коллекция элементов для биндинга на ListView. Т.е. у каждого элемента должны быть ссылки на prev и next, которые создаются/исправляются при изменении коллекции — эдакий двусвязный список. Тогда можно достаточно дёшево делать биндинги для изучения предыдущей и последующей строк и использования их значений в валидаторах и т.п. Главное про null safety не забыть.
Учитывая как хорошо в C# сылки на коллекции работают — лучше использовать глобальный список и индексы элементов в нём...
блин... только сейчас понял что MVVM не подайдёт ... код не мой я его просто дописываю а там из -за того что контролы не в xml а вручную создаётся то DataContext слетает в null.
Здравствуйте, VjcheslavV, Вы писали:
VV>блин... только сейчас понял что MVVM не подайдёт ... код не мой я его просто дописываю а там из -за того что контролы не в xml а вручную создаётся то DataContext слетает в null.
MVVM вовсе не запрещает создавать контролы в рантайме из кода — это именно про идею разделения обязанностей между моделью, вьюшкой и вью-моделью
Здравствуйте, VjcheslavV, Вы писали:
VV>Учитывая как хорошо в C# сылки на коллекции работают — лучше использовать глобальный список и индексы элементов в нём...
Отлично всё работает. Надо лишь понимать ограничения реализации: например, если используется виртуализация, то далеко не для каждого item во viewmodel будет создан физический контрол на view (а если есть сейчас, то нет гарантии что через пять минут он будет всё ещё жив, а если жив — что соответствует всё тому же item как и раньше)