为什么我的自定义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's依赖属性不能与动态绑定一起工作?

将UserControl的DataContext设置为自身,所有绑定将尝试在UserControl上找到路径,这就是为什么不应该在UserControls上设置DataContext的原因。

你应该在Visual Studio的输出窗口中看到一个绑定错误,上面写着:

System.Windows。数据错误:40:BindingExpression路径错误:'ItemTypeIdCode'属性未在'对象''UserControl1' (Name='UserControl')'. ...

相关文章: