Что случилось с "DataContext = this" в пользовательских элементах WPF?

Я где-то читал, что установка DataContext = this в конструкторе пользовательского элемента управления - это плохая практика (не могу найти, где это было). Почему эта плохая практика? Какая альтернатива?

Ответы

Ответ 1

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

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


Скажите, что у вас есть пользовательский элемент управления, на котором есть куча суб-элементов управления. Вместо этого вы можете указать DataContext на вспомогательных элемента управления как ваш пользовательский класс управления (или что бы вы ни хотели). Это позволит вам привязать эти вспомогательные элементы управления к вашим свойствам пользовательского управления, при этом позволяя любым пользователям вашего элемента управления установить его контекст данных в свою модель представления и привязать к свойствам.