2013-12-18 45 views
2

我在.xaml中創建了一個文本塊並在名爲WrodName的.cs文件中聲明瞭一個屬性。如何將該屬性與文本塊綁定。我需要在標籤的xaml代碼中編寫的代碼,即DataContext代碼。直到現在我想出了這個如何將文本塊與屬性綁定

<TextBlock Text="{Binding WordName}"/> 

而在cs文件:

public String WordName { get; set; } 

回答

1

設置的DataContext從XAML:

<Window x:Class="ApplicationName" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

但你M =必須指定值的情況下在Initialize()之前:

WordName = "word"; 
    InitializeComponent(); 

或者從後臺代碼那樣:

this.DataContext = this; 

但無論如何,我建議你使用MVVM架構INotifyPropertyChanged的事件。在這種情況下,只要屬性設置爲新值,UI就會更新。

+0

讓我再試試這個,送還給你。同時謝謝 –

+0

沒有沒有形成我。我正在初始化構造函數中的wordname的值,所以它是否正確 –

+1

您需要在Initialize()之前分配值或實現iNotifyPropertyChanged – Paparazzi

1

在你的代碼創建一個視圖模型類

public class MyViewModel 
{ 
    public String WordName { get; set; } 
} 

那麼你的觀點的背後設置的ItemsSource

public class MyView 
{ 
    this.DataContext = new MyViewModel(); 

} 

有差異的方式來設置的datacontext無論是在代碼或XAML中。真的是一個偏好的事情。

2

您將需要設置DataContext。這樣做的一個快速方法是將其設置在構造函數中DataContext = this;

您還需要在調用InitalizeComponent()之前設置屬性,或者最好是實現INotifyPropertyChanged。否則,當設置屬性時,您的UI將不會更新。

見 - XAML: Binding a property in a DataTemplate

一個簡單的例子

class YourClass : INotifyPropertyChanged 
{ 
     private String _wordName; 
     public String WordName 
     { 
      get { return _wordName; } 
      set 
      { 
       if (_wordName != value) 
       { 
        _wordName= value; 
        OnPropertyChanged("WordName"); 
       } 

      } 
     } 

     /// <summary> 
     /// Raises the PropertyChanged notification in a thread safe manner 
     /// </summary> 
     /// <param name="propertyName"></param> 
     private void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 

} 
+0

Thanx很多這個代碼。它幫助我理解如何實現INotifyPropertyChanged –

+0

是的,即使你的綁定是正確的,你的UI也不會在沒有它的情況下更新。如果你在'InitializeComponent()'之前設置你的屬性,但是它之後不會更新它可能是INotifyPropertyChange有問題。這是我們在生產代碼中使用的模式。我認爲它工作得很好。 – ansible

0

這將綁定到你的財產:

<TextBlock Text="{Binding WordName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/> 

而且在構造函數設置的DataContext:

this.DataContext = this; 
0

另外,由ElementName。首先命名窗口:

<Window x:Class="ApplicationName" x:Name=AnyName ... 

然後綁定到窗口元素:

<TextBlock Text="{Binding WordName, ElementName=AnyName}"/> 
相關問題