我有一个对象(类):Foo
。
它有一个属性:Bar
。
我该怎样做才能绑定到'Bar
'属性?
(WPF,.NET 4)
编辑:
为了更明确,我举了一个例子:
我有Dot:UserControl
我创建了Dot - CenterX和CenterY的2个属性:
public double CenterX
{
get
{
return Canvas.GetLeft(this) + this.Width / 2;
}
set
{
Canvas.SetLeft(this, value - this.Width / 2);
}
}
public double CenterY
{
get
{
return Canvas.GetTop(this) + this.Height / 2;
}
set
{
Canvas.SetLeft(this, value - this.Height / 2);
}
}
现在:
<Line Stroke="Black" x:Name="line1"
X1="{Binding ElementName=dot1, Path=CenterX}"
Y1="{Binding ElementName=dot1, Path=CenterY}"
X2="{Binding ElementName=dot2, Path=CenterX}"
Y2="{Binding ElementName=dot2, Path=CenterY}" />
不起作用......
答案 0 :(得分:1)
将INotifyPropertyChanged实现到您的类,以便WPF绑定框架知道在更改属性时更新相关的绑定控件。
对于实际绑定,您可能会发现这个有用的
http://japikse.blogspot.com/2009/07/inotifypropertychanged-and-wpf.html
使用INotifyPropertyChanged,您的课程将类似于
public class Foo:INotifyPropertyChanged
{
public double CenterX
{
get
{
return Canvas.GetLeft(this) + this.Width / 2;
}
set
{
Canvas.SetLeft(this, value - this.Width / 2);
OnPropertyChanged("CenterX");
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
随时更改CenterX值,OnPropertyChanged(“CenterX”);将告诉UI刷新具有绑定属性的控件
答案 1 :(得分:0)
您的问题不够精确,无法完全回答......除非另有说明,否则绑定路径始终相对于控件的DataContext。假设您的DataContext
是Foo
的实例,您可以这样做:
<TextBlock Text="{Binding Bar}" />
或者如果你想更明确:
<TextBlock Text="{Binding Path=Bar}" />
现在,如果Foo
本身是当前DataContext
的属性,则可以这样做:
<TextBlock Text="{Binding Foo.Bar}" />
看看这个Binding Cheat Sheet,当你刚接触WPF绑定时它非常有用