2016-01-24 165 views
0

我有文本框和我的用戶控件,如何將文本框屬性文本綁定到我的屬性消息在UserControl中?將UIElement屬性綁定到我的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"); 
      } 
     } 

但是這對我來說不起作用。 我得到的錯誤爲:

無法找到與此錯誤代碼相關的文本。

而且我試試這個: 我嘗試tihs:

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); } 
     } 

但unsver: 「與此錯誤代碼相關聯的文本可能不會被發現。」

+1

你必須在你的UserControl中爲Message註冊一個'DependencyProperty':https://msdn.microsoft.com/library/system.windows.dependencyproperty(v=vs.110).aspx –

+0

@FlatEric更新問題 – user3588235

+1

您正在註冊它爲所有者類型'ImageList',但您的控件似乎是'MyAppBar'類型。而依賴項屬性類型是'int',而CLR屬性類型是'string' –

回答

1

首先,定義您自己的DependencyProperty需要保持命名規則。在上面的代碼中,「UserControlTextProperty」不被識別爲屬性名稱應該是「屬性」+屬性,如「MessageProperty」。

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綁定到它自己。