将属性绑定到C#中的另一个属性

时间:2017-09-12 08:57:53

标签: c# data-binding properties delegates inotifypropertychanged

我有一个名为Grid的类,它由另外两个类CircleLine组成。

public class Grid
{
    public Circle Circle {get; set;}
    public Line Line {get; set;}
}

我希望Line的几何图形与Circle的几何图形保持连接。这意味着当我拖动或移动Circle时。我希望以某种方式通知Line并根据Circle的新位置更新其几何图形。

当然,我总是可以使用GridCircle的更新几何创建新的Line,但我不想创建新的Grid。我只是想以某种方式将Line的终点绑定到例如Circle的中心。

C#中的哪些技术允许我这样做?代表? INotifyPropertyChanged的?

1 个答案:

答案 0 :(得分:1)

public class Circle : INotifyPropertyChanged
{
    private int radius;       
    public int Radius 
    {
        get { return radius; }
        set 
        {
            radius = value;
            RaisePropertyChanged("Radius");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        var propChange = PropertyChanged;
        if (propChange == null) return;
        propChange(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后在Grid.cs

public class Grid
{
    private Circle circle;
    public Circle Circle 
    {
       get { return circle; }
       set 
       {
           circle = value;
           if (circle != null) 
              circle.PropertyChanged += OnPropertyChanged;
       }
    }

    private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "Radius")
            // Do something to Line
    }
}