如何将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=???}" />
答案 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" />