为什么我的自定义UserControl's依赖属性不能与动态绑定一起工作?
本文关键字:不能 属性 动态绑定 一起 工作 依赖 自定义 我的 UserControl 为什么 | 更新日期: 2023-09-27 18:17:15
如果在调用它的XAML中静态定义该值,则My Custom 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 Code:
public static readonly DependencyProperty TextBoxTextProperty =DependencyProperty.Register("TextBoxText", typeof(string), typeof(UserControl1));
public string TextBoxText
{
get { return (string)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}
In my Main Window 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;
}
这段代码成功地将我的自定义UserControl添加为ListBox中的ListBoxItem,但是问题是它没有显示任何正在绑定的文本。
我不明白我哪里做错了。将UserControl的DataContext
设置为自身,所有绑定将尝试在UserControl上找到路径,这就是为什么不应该在UserControls上设置DataContext
的原因。
你应该在Visual Studio的输出窗口中看到一个绑定错误,上面写着:
System.Windows。数据错误:40:BindingExpression路径错误:'ItemTypeIdCode'属性未在'对象''UserControl1' (Name='UserControl')'. ...