WPF代码绑定不起作用

时间:2014-02-16 21:10:42

标签: c# wpf binding

我在代码中遇到绑定问题。

我使用X,Y双属性和依赖属性控制。

    public double X
    {
        get { return (double)GetValue(XProperty); }
        set
        {
            SetValue(XProperty, value);
        }
    }

    public double Y
    {
        get { return (double)GetValue(YProperty); }
        set
        {
            SetValue(YProperty, value);
        }
    }

    public static readonly DependencyProperty XProperty = DependencyProperty.Register("X", typeof(double), typeof(VisualPin));
    public static readonly DependencyProperty YProperty = DependencyProperty.Register("Y", typeof(double), typeof(VisualPin));

在其他控件中我有Line,我尝试使用绑定到Line终点,如下所示:

var xBinding = new Binding("XProperty") {Source = _startPin};
var yBinding = new Binding("YProperty") {Source = _startPin};
Line.SetBinding(Line.X1Property, xBinding);
Line.SetBinding(Line.Y1Property, yBinding);

所有属性中的所有数据都可以,我检查过,但绑定不起作用。我不知道为什么......(所有控件都在一个画布上)

非常感谢!

2 个答案:

答案 0 :(得分:0)

要调试这种情况,你应该使用像snoop WPF这样的工具来查看XAML。这将显示实际绑定是什么。

可能是你的绑定,但没有更新。要解决此问题,您的类应实现INotifyPropertyChanged。每当您想要更新值时,比如在设置值之后,使用属性的名称调用以下函数:

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
    if (PropertyChanged != null)
    {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

答案 1 :(得分:0)

对不起,我的错。问题出在寄存器依赖属性的第一个参数中。

public static readonly DependencyProperty XProperty = DependencyProperty.Register("X",    typeof(double), typeof(VisualPin));
public static readonly DependencyProperty YProperty = DependencyProperty.Register("Y", typeof(double), typeof(VisualPin));

而不是:

public static readonly DependencyProperty XProperty = DependencyProperty.Register("XProperty",    typeof(double), typeof(VisualPin));
public static readonly DependencyProperty YProperty = DependencyProperty.Register("YProperty", typeof(double), typeof(VisualPin));