.net 绑定到属性
我有一个对象(类):.net 绑定到属性,.net,wpf,binding,properties,.net,Wpf,Binding,Properties,我有一个对象(类):Foo 它有一个属性:Bar 我应该怎么做才能绑定到“Bar”属性 (WPF,.NET 4) 编辑: 更明确地说,我举一个例子: 我有一个Dot:UserControl 我创建了点的两个属性-CenterX和CenterY: public double CenterX { get { return Canvas.GetLeft(this) + this.Width / 2; }
Foo
它有一个属性:Bar
我应该怎么做才能绑定到“Bar
”属性
(WPF,.NET 4)
编辑:
更明确地说,我举一个例子:
我有一个Dot:UserControl
我创建了点的两个属性-CenterX和CenterY:
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);
}
}
现在:
不起作用…你的问题不够精确,无法完全回答。。。除非另有指定,否则绑定路径始终相对于控件的DataContext。假设您的
DataContext
是Foo
的一个实例,您可以这样做:
<TextBlock Text="{Binding Bar}" />
<TextBlock Text="{Binding Foo.Bar}" />
请看一看,当您不熟悉WPF绑定时,这非常有帮助将INotifyPropertyChanged实现到您的类,以便WPF绑定框架知道在属性更改时更新相关的绑定控件 对于实际绑定,您可能会发现这很有用 通过InotifyProperty更改,您的类将如下所示
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刷新绑定了属性的控件.NET 4 WPF或ASP.NET或WinForms?你从哪里来?
Foo
是实例还是类,您要绑定的位置如何才能到达Foo
?抱歉,忘记了,这是针对WPFSo的,最后,DependencyProperty
和INotifyPropertyChanged
之间的区别是什么?@serhio,请参见上面给出的示例,生成的依赖项属性生成代码:return(double)GetValue(CenterXProperty)
,但我需要返回Canvas.GetLeft(this)+this.Width/2代码>。。。
<TextBlock Text="{Binding Foo.Bar}" />
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));
}
}