数据绑定类成员的类成员

时间:2010-06-16 07:17:47

标签: c# wpf binding

我需要一些关于WPF和数据绑定的帮助。

假设我有一个ClassA成员的ClassA。 ClassB再次成为会员, 也许是一个int:

ClassB
{
  public int MemberOfB { get; set; }
}

ClassA
{
    private ClassB _theB;
    public ClassB MemberOfA
    {
        get {return _theB;}
        set
        {
            _theB = value;

            // Need to do something here...
        }
    }
}

当我在XAML中使用这样的数据绑定时:

<TextBox Text="{Binding Path=MemberOfA.MemberOfB}"/>

Textbox的Datacontext是ClassA类型的对象。

如您所见,我需要在ClassA中的MemberOfA的setter中进行一些计算。 但是通过上面的数据绑定,这个setter当然不会被调用,因为它会绑定 给ClassB的成员。

那么,如果MemberOfA发生变化(当我在文本框中输入内容时),如何通知我?有没有最佳做法? (没有检查Visual Studio中的代码,因此可能存在一些语法错误。)

谢谢,沃尔特

2 个答案:

答案 0 :(得分:2)

处理此问题的最佳方法可能是让B实现INotifyPropertyChanged。当A获得B的新实例时,请将其连接到PropertyChanged事件(并在必要时从旧B的事件中取消挂钩)。

public B MemberOfA {
    get { return _b; }
    set {

        if (_b != null) { _b.PropertyChanged -= B_PropertyChanged; }

        _b = value;

        if (_b != null) { _b.PropertyChanged += B_PropertyChanged; }

        DoWhatever(_b);

    }
}

private void B_PropertyChanged(object sender, PropertyChangedEventArgs e) {
    DoWhatever((B)sender);
}

答案 1 :(得分:0)