如果在调用它的XAML中静态定义了值,我的自定义UserControl的依赖项属性将正确绑定,如下所示:
TextBoxText="myName"
但不是如果值本身是动态绑定的:
TextBoxText="{Binding ItemTypeIdCode}"
我的完整代码。
自定义UserControl XAML:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="TestUserControl.UserControl1"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
x:Name="UserControl" Height="22" Width="282">
<Grid x:Name="LayoutRoot">
<TextBlock TextWrapping="Wrap" Text="{Binding MyName, ElementName=LayoutRoot}"/>
</Grid>
自定义UserControl代码:
public static readonly DependencyProperty TextBoxTextProperty =DependencyProperty.Register("TextBoxText", typeof(string), typeof(UserControl1));
public string TextBoxText
{
get { return (string)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}
在我的主窗口XAML中:
<Grid x:Name="LayoutRoot">
<Button Content="Button" Height="78" Margin="0,0,93,112" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="94" Click="MyButtonClick"/>
<ListBox x:Name="MyListBox" HorizontalAlignment="Left" Margin="8,8,0,112" Width="192">
<ListBox.ItemTemplate>
<DataTemplate>
<local:UserControl1 HorizontalAlignment="Stretch" Margin="286,37,56,0" VerticalAlignment="Top" d:LayoutOverrides="Height" TextBoxText="{Binding MyName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
在我的主窗口代码中:
private void MyButtonClick(object sender, System.Windows.RoutedEventArgs e)
{
List<string> MyName = new List<string>();
MyName.Add("Name 1");
MyName.Add("Name 2");
MyName.Add("Name 3");
MyListBox.ItemsSource = MyName;
}
此代码在ListBox中成功将我的自定义用户控件添加为ListBoxItem但问题是它没有显示任何我绑定的文本。
我不明白我做错了什么。
答案 0 :(得分:3)
您将UserControl的DataContext
设置为自身,然后所有绑定都会尝试在UserControl上找到路径,这就是您不应在UserControl上设置DataContext
的原因。
您应该在Visual Studio的“输出”窗口中看到绑定错误,如下所示:
System.Windows.Data错误:40:BindingExpression路径错误:'object'''UserControl1'(Name ='UserControl')'上找不到'ItemTypeIdCode'属性。 ...