我有一个usercontrol(标签和文本框。我想将用户控件的Text绑定到DTO类Employee(Employee.Name)中的属性Name,其中绑定在主窗口中设置,在usercontrol。这是我的UserControl(查看控件标签和文字)
<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>
标题是控件的标题,文字显示值
这是
背后的代码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" />
然后在主窗口中,从Employees列表中,我选择一个并将其分配给上下文
this.DataContext = EmployeeObject; // Name = "Joe"
但是usercontrol的Text属性不会显示&#34; Joe&#34;。甚至从未调用过该属性的setter。奇怪的是,如果在我的usercontrol的构造函数中,我不会将UserControl.Datacontext分配给此
DataContext = this; // within the constructor of UserControl
然后甚至Label控件为空(标签控件链接到Caption依赖属性)。我在stackOverflow和其他地方看过无数类似的问题。 (RelativeSource Self等...)。没有任何作用...我的用户控件的Text属性不显示主窗口中设置的Datacontext的值......
非常感谢任何帮助
答案 0 :(得分:1)
您需要将DataContext
的{{1}}设置为主窗口的UserControl
,将DataContext
的{{1}}设置为Grid
。这意味着当UserControl
正在查找其数据时,它会查找它从UserControl
继承的DataContext,但是当您的MainWindow
查找其数据时,它会查看{{1} }}。你这样做:
Grid