我在.xaml中创建了一个文本块,并在名为WrodName的.cs文件中声明了一个属性。如何使用textblock绑定该属性。我需要在标签的xaml代码中编写的代码,即DataContext代码。直到现在我想出了这个
<TextBlock Text="{Binding WordName}"/>
在.cs文件中:
public String WordName { get; set; }
答案 0 :(得分: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
}
答案 1 :(得分:1)
从xaml:
设置DataContext<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}}">
但在这种情况下,你必须在Initialize()之前指定值:
WordName = "word";
InitializeComponent();
或者来自代码隐藏:
this.DataContext = this;
但无论如何,我建议您将MVVM架构与INOtifyPropertyChanged事件一起使用。在这种情况下,只要将属性设置为新值,UI就会更新。
答案 2 :(得分:1)
创建一个ViewModel类
public class MyViewModel
{
public String WordName { get; set; }
}
然后在您的视图后面的代码中设置itemssource
public class MyView
{
this.DataContext = new MyViewModel();
}
有多种方法可以在代码或xaml中设置datacontext。真是一个偏好的东西。
答案 3 :(得分:0)
这将绑定到您的财产:
<TextBlock Text="{Binding WordName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
还在你的ctor中设置DataContext:
this.DataContext = this;
答案 4 :(得分:0)
另外,通过ElementName。首先命名窗口:
<Window x:Class="ApplicationName" x:Name=AnyName ...
然后绑定到window元素:
<TextBlock Text="{Binding WordName, ElementName=AnyName}"/>