Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 绑定到属性_.net_Wpf_Binding_Properties - Fatal编程技术网

.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));
        }
    }