Использование this.DataContext
будет работать , но оно хрупкое и ужасное и не является хорошим способом для разработки вашего приложения.Если бы я использовал ваш пользовательский элемент управления и написал следующее xaml:
<CarListItem DataContext="{Binding MyThing}" />
..., тогда ваш элемент управления сломался бы, независимо от того, правильно ли установлено свойство Car
или нет.Это не очень красиво.
Более надежный подход - пометить элемент UserControl
в Xaml символом x:Name
и использовать ElementName
в привязке.Итак, ваш элемент управления выглядит примерно так:
<UserControl x:Name="control" ....... (namespaces/etc here)>
<Grid>
<Label Content="{Binding Car.Name, ElementName=control}" Name="lblCarName"/>
</Grid>
Теперь, если вы хотите установить DataContext
на Grid
(используя DataContext="{Binding Car, ElementName=control}"
), вы можете получить преимущество datacontext в болеенадежный способ.
Однако для того, чтобы все это работало, вы должны выставлять свое поле car
как свойство, а не просто как поле.Вам также необходимо реализовать INotifyPropertyChanged
, чтобы пользовательский интерфейс понимал, когда вы изменяете значение свойства, хотя вы можете временно обойти это, установив car
до , который вы вызываете InitializeComponent()
в конструкторе.