如何将textblock与property绑定

时间:2013-12-18 17:34:03

标签: c# wpf xaml

我在.xaml中创建了一个文本块,并在名为WrodName的.cs文件中声明了一个属性。如何使用textblock绑定该属性。我需要在标签的xaml代码中编写的代码,即DataContext代码。直到现在我想出了这个

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

在.cs文件中:

public String WordName { get; set; }

5 个答案:

答案 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}"/>