如何绑定到类变量

时间:2014-04-24 16:08:26

标签: c# .net wpf xaml

如何将TextBlock绑定到MyListClass.myText?

//code behind
public cList MyListClass = new cList();

public class cList : DependencyObject
{    
     public string myText
    {
        get { return (string)GetValue(myTextProperty); }
        set { SetValue(myTextProperty, value); }
    }

    public static readonly DependencyProperty myTextProperty =
        DependencyProperty.Register("myText", typeof(string), typeof(cList), new PropertyMetadata(null));

    public cList()
    {
        myText = "Test";
    }
}

我应该将什么设置为来源

<TextBlock Text="{Binding myText, Source=???}" />

3 个答案:

答案 0 :(得分:1)

目前还不太清楚你在寻找什么。使用依赖关系对象和属性,以便您可以将绑定到它们,而不是将它们用于另一个绑定。

话虽如此,假设TextBlock的DataContext设置为cList对象,您根本不需要使用Source,只需将其留在myText即可。如果将datacontext设置为包含cList的对象(例如在名为MyCList的属性中),则将路径设置为MyCList.myText

答案 1 :(得分:1)

只需设置DataContext,它会自动将myText属性绑定到TextBlock

<TextBlock Text="{Binding myText}" Name="somename" />

代码隐藏:

somename.DataContext= cList;

或简单地说:

this.DataContext = cList;

答案 2 :(得分:0)


更好的方法是将Textblock的text属性与class属性绑定,而不是每次文本值更改时都设置DataContext。


更改代码以获得更准确的绑定。

为此类实现INotifyPropertyChanged接口,并按如下方式实现其方法。

    public class cList : DependencyObject, INotifyPropertyChanged
    {    

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public string myText
        {
            get 
            { 
                 return (string)GetValue(myTextProperty); 
            }
            set 
            { 
                SetValue(myTextProperty, value);
                NotifyPropertyChanged("myText"); 
            }
        }

        .....
        .....
    }

和XAML如下:

    <TextBlock Text="{Binding myText}" ElementName="YourXAMLPageName" />