绑定到 UserControl 的属性不起作用

我有一个自定义文本框,我计划将其包含在另一个用户控件中,但是在为其设置绑定时,它根本没有绑定。


为了清楚起见,我简化了代码。


我的自定义文本框:


<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">

    <TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />

</UserControl>

partial class CustomTextBox : UserControl 

{

    public string Text

        {

            get { return (string)GetValue(TextProperty); }

            set

            {

                SetValue(TextProperty, value);

            }

        }


        public static readonly DependencyProperty TextProperty = DependencyProperty.Register(

            "Text",

            typeof(string),

            typeof(CustomTextBox),

            new PropertyMetadata(String.Empty));

}

此绑定按预期工作。当CustomTextBox在另一个用户控件或窗口中使用时,我可以按预期访问该属性。


以下代码块描述了使用的 UserControlCustomTextBox以及具有我想要绑定到的属性的相应 ViewModel Text。


<UserControl>

    <UserControl.DataContext>

        <vm:MyViewModel />

    </UserControl.DataContext>

    <local:CustomTextBox Text="{Binding FooBar, UpdateSourceTrigger=PropertyChanged}" />

</UserControl>

public class MyViewModel : INotifyPropertyChanged

{

    private string _fooBar;

    public string FooBar

        {

            get { return _fooBar = (_fooBar ?? ""); }

            set

            {

                _fooBar = value; OnPropertyChanged();

            }

        }


    public event PropertyChangedEventHandler PropertyChanged;

}

当我想将Text属性绑定到另一个 UserControl 中的 ViewModel 时,我的问题就发生了,它只是不起作用。在本例中,我尝试将Text属性绑定到类FooBar上的属性MyViewModel,但是对Text属性的更改不会反映在FooBar属性上,反之亦然。但是,当我将鼠标悬停在 XAML 视图中的绑定上时,它会显示属性的类型,因此我并没有完全看出这里出了什么问题。

我最好的猜测是它与访问同一属性的两个绑定有关。


POPMUISE
浏览 114回答 1
1回答

天涯尽头无女友

修改 DP 注册以包含FrameworkPropertyMetadataOptions.BindsTwoWayByDefault选项public static readonly DependencyProperty TextProperty = DependencyProperty.Register(&nbsp; &nbsp; "Text",&nbsp; &nbsp; typeof(string),&nbsp; &nbsp; typeof(CustomTextBox),&nbsp; &nbsp; new FrameworkPropertyMetadata(String.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
打开App,查看更多内容
随时随地看视频慕课网APP