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