我在.xaml中創建了一個文本塊並在名爲WrodName的.cs文件中聲明瞭一個屬性。如何將該屬性與文本塊綁定。我需要在標籤的xaml代碼中編寫的代碼,即DataContext代碼。直到現在我想出了這個如何將文本塊與屬性綁定
<TextBlock Text="{Binding WordName}"/>
而在cs文件:
public String WordName { get; set; }
我在.xaml中創建了一個文本塊並在名爲WrodName的.cs文件中聲明瞭一個屬性。如何將該屬性與文本塊綁定。我需要在標籤的xaml代碼中編寫的代碼,即DataContext代碼。直到現在我想出了這個如何將文本塊與屬性綁定
<TextBlock Text="{Binding WordName}"/>
而在cs文件:
public String WordName { get; set; }
設置的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就會更新。
在你的代碼創建一個視圖模型類
public class MyViewModel
{
public String WordName { get; set; }
}
那麼你的觀點的背後設置的ItemsSource
public class MyView
{
this.DataContext = new MyViewModel();
}
有差異的方式來設置的datacontext無論是在代碼或XAML中。真的是一個偏好的事情。
您將需要設置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
}
Thanx很多這個代碼。它幫助我理解如何實現INotifyPropertyChanged –
是的,即使你的綁定是正確的,你的UI也不會在沒有它的情況下更新。如果你在'InitializeComponent()'之前設置你的屬性,但是它之後不會更新它可能是INotifyPropertyChange有問題。這是我們在生產代碼中使用的模式。我認爲它工作得很好。 – ansible
這將綁定到你的財產:
<TextBlock Text="{Binding WordName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
而且在構造函數設置的DataContext:
this.DataContext = this;
另外,由ElementName。首先命名窗口:
<Window x:Class="ApplicationName" x:Name=AnyName ...
然後綁定到窗口元素:
<TextBlock Text="{Binding WordName, ElementName=AnyName}"/>
讓我再試試這個,送還給你。同時謝謝 –
沒有沒有形成我。我正在初始化構造函數中的wordname的值,所以它是否正確 –
您需要在Initialize()之前分配值或實現iNotifyPropertyChanged – Paparazzi