将UIElement属性绑定到我的UserControl属性

时间:2016-01-24 13:41:44

标签: c# xaml binding properties user-controls

我有Textbox和我的用户控件,如何将Textbox属性Text绑定到UserControl中的属性消息?

XAML:

<TextBox Name="txtMessages"/>

<myControl:MyAppBar x:Name="appBar" Message="{Binding ElementName=txtMessages,  Path=Text, Mode=TwoWay}"  Grid.Row="3"/>

我的财产:

     public event PropertyChangedEventHandler PropertyChanged;
        public void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
 private string message;
        public string Message
        {
            get
            {
                return message;
            }
            set
            {
                message = value;
                RaisePropertyChanged("Message");
            }
        }

但这对我不起作用。 我得到错误:

  

找不到与此错误代码关联的文字。

我也试试这个:  我试试看:

public static readonly DependencyProperty UserControlTextProperty = DependencyProperty.Register(
        "Message",
        typeof(int),
        typeof(ImageList),
        new PropertyMetadata(0, new PropertyChangedCallback(MyControl.MyAppBar.OnUserControlTextPropertyChanged))
        );

 public string Message
        {
            get { return (string)GetValue(UserControlTextProperty); }
            set { SetValue(UserControlTextProperty, value); }
        }

但没有成功: “无法找到与此错误代码相关联的文本。”

1 个答案:

答案 0 :(得分:1)

首先,定义自己的DependencyProperty需要保留命名规则。在上面的代码&#34; UserControlTextProperty&#34;不承认属性名称应为&#34;属性&#34; +属性,例如&#34; MessageProperty&#34;。

public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(int), typeof(ImageList), new PropertyMetadata(0, new PropertyChangedCallback(MyControl.MyAppBar.OnUserControlTextPropertyChanged)));

public string Message
{
    get { return (string)GetValue(MessageProperty); }
    set { SetValue(MessageProperty, value); }
}

它将被识别为常规依赖属性。 如果您使用自己的用户控件编写,则不必将其ViewModel分开,而是让您的控件实现INotifyPropertyChanged接口并将控件的DataContext绑定到自身。