5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
|
||||||||||||||||
1 | ||||||||||||||||
DependencyProperty для ItemsControl23.01.2020, 14:21. Показов 704. Ответов 7
Метки нет (Все метки)
В одном из предыдущих постов Элд Хасп посоветовал переделать INPC на DP.
У меня было:
0
|
23.01.2020, 14:21 | |
Ответы с готовыми решениями:
7
Не работает Binding для DependencyProperty ItemsControl сортировка Странное поведение ItemsControl GridSplitter внутри ItemsControl |
Модератор
|
|||||||||||
23.01.2020, 14:52 | 2 | ||||||||||
Я посоветовал
public class MyControl : ItemsControl вы задали новые свойства для своего настраиваемого элемента.После этого в XAML можно их использовать
RelativeSource={RelativeSource Self} - это ссылка на самого себяНо ещё раз повторюсь, для данного решения нужно делать не свой настраиваемый элемент с дополнительными свойствами, а вынести логику и дополнительные свойства из CB окна в ViewModel. Добавлено через 2 минуты Хоты в данном случае надо, наверное, ссылаться на родительский элемент , а не на самого себя.
0
|
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
|
|
23.01.2020, 15:08 [ТС] | 3 |
Элд Хасп, мне придется в любом случае определить INPC, либо в VM, либо в CB. То есть наличие/отсутствие DP не влияет на наличие INPC. А если я перенесу это свойство в VM, то я могу привязаться напрямую к свойству ScaleX у Canvas. Зачем тогда нужна будет лишняя прослойка в виде DP Scale?
Добавлено через 38 секунд Так вернее Добавлено через 2 минуты Или в CB для изменения DP свойства Scale, мы должны обращаться к контролу по имени и изменять Scale,в этом случае INPC не нужен?
0
|
Модератор
|
|
23.01.2020, 16:38 | 4 |
Влияет.
Если вы делаете UI элемент или любой другой производный от DependencyObject тип, то в нём вы вместо обычных свойств объявляете DP свойства. И INPC там не нужен. Окно (Window) - это тоже производный от DependencyObject класс. Поэтому в нём нет необходимости объявлять INPC. В вашей же задаче, вернее в реализации её решения, вам понадобился INPC, в первую очередь, из-за того, что дополнительный свойства и их логика у вас расположены в CB окна, а не в отдельном типе. Если вам понадобился INPC в производном от DependencyObject классе, то скорее всего вы что-то делаете не верно. Добавлено через 8 минут INPC нужен для извещения привязок (Binding) об изменении значения свойства. DP свойства и так уже имеют механизм для этого. А для обычных свойств нужен INPC.
0
|
Модератор
|
||||||||||||||||
23.01.2020, 17:51 | 5 | |||||||||||||||
Semyon001, вот вам действующий пример варианта реализации вашей задачи.
Создаёте тип для данных. Так как в данном случае это тип для View, то в отдельной Модели нет смысла. Сеттеры у свойств приватны. Для присвоения значений свойствам сделаны отдельные методы. Это сделано специально с цель облегчения понимания работы INPC. В реале так делать необязательно.
1
|
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
|
||||||
24.01.2020, 11:12 [ТС] | 6 | |||||
Элд Хасп, а чем отличается ваш класс OnPropertyChangedClass от стандартной реализации интерфейса INotifyPropertyChanged:
0
|
Модератор
|
|||||||||||||||||||||
24.01.2020, 15:11 | 8 | ||||||||||||||||||||
Тем, что не надо делать каждый раз реализацию по новой.
И посмотрите сам класс. В данном случае используется только метод OnPropertyChanged. Это сделано с демонстрационной целью. В реальных приложениях свойства объявляются так
В целом в реальном приложении класс выглядел бы примерно так Класс со свойствами
В Конструторе XAML мы получаем возможность проверять как будут меняться элементы при изменении значений в ViewModel
0
|
24.01.2020, 15:11 | |
24.01.2020, 15:11 | |
Помогаю со студенческими работами здесь
8
Полосы прокрутки у ItemsControl В ItemsControl добавить LayoutTransform ItemsControl внутри TabControl Условный вывод Item'a в ItemsControl Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |