У меня есть usercontrol (метка и текстовое поле). Я хотел бы привязать текст пользовательского элемента управления к имени свойства из класса DTO Employee (Employee.Name), где bind установить в главном окне, вне UserControl. Это мой UserControl (взгляд на этикетке элементов управления и текста)wpf привязать свойство usercontrol к datacontext mainwondow
<UserControl x:Class="TestCompany.controls.textEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TestCompany.controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<Label Name="label" Content="{Binding Caption}" Grid.Row="0" FontSize="35" FontWeight="Light"/>
<TextBox Name="textbox" Text="{Binding Text}" Grid.Row="1" FontSize="33" Background="White" />
</Grid>
Подпись это название управления и текст Displ Айс Значение
А вот код позади
public string Caption
{
get
{
return (string)GetValue(CaptionProperty);
}
set
{
SetValue(CaptionProperty, value);
}
}
public static DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(textEdit), null);
public string Text
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(textEdit), null);
Теперь в главном окне, это то, как я использую мой пользовательский элемент управления
<controls:textEdit Caption="Name" Text="{Binding Name}" Grid.Column="0" HorizontalAlignment="Stretch" Margin="0,0,20,0" />
Затем в главном окне, из списка Сотрудники, я беру выбранный вариант, и я назначаю его в контекст
this.DataContext = EmployeeObject; // Name = "Joe"
Но свойство Text usercontrol не отображает «Joe». Даже сеттер собственности никогда не называется. Странно это, что если в конструкторе моего UserControl я не назначайте UserControl.Datacontext к этому
DataContext = this; // within the constructor of UserControl
тогда даже контроль этикетки пуст (контрольная метка связана со свойством зависимостей Caption). Я рассмотрел множество подобных проблем в stackOverflow и еще где. (RelativeSource Self и т. Д.). Ничто не работает ... Текст свойство моего пользовательского элемента управления не отображает значения из набора DataContext в главном окне ...
Любая помощь будет принята с благодарностью
Возможный дубликат [Свойство DependencyProperty для привязки к UserControl] (http://stackoverflow.com/questions/16985382/binding-to-usercontrol-dependencyproperty); прочитайте также комментарии о DataContext в соответствии с принятым ответом – ASh
Спасибо за предложение. Я применил предложенное решение. Текст правильно отображает значение. Но метка теперь пуста – TheSoul
Можете ли вы включить код при создании EmployeeObject? – tgpdyk