如何在绑定到getter属性时让INotifyPropertyChanged绑定更改?

时间:2015-04-01 21:40:17

标签: c# wpf xaml inotifypropertychanged

我有像这样的虚拟

class Vm : Notifiable
{
    public string Name 
    {
        get { return _Name; }
        set { _Name = value; OnPropertyChanged("Name"); }
    }
    private _Name = "";
}

还有这样的

class CollectionVm : Notifiable
{
    public ObservableCollection<Vm> Vms {get;set;}
    public Vm Selected 
    {
        get { return _Selected; }
        set { _Selected= value; OnPropertyChanged("Selected"); }
    }
    Vm _Selected = null;
}

第三个像这样

class OuterVm : Notifiable
{
    CollectionVm _collection;
    public Vm Display
    {
        get {return _collection.Selected; }
    }
}

和这样的绑定

<TextBlock Text={Binding Display.Name}/>

我的问题是,当集合中的选择发生变化时,文本块不会更新。我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

这需要一种机制,您可以在PropertyChanged中引发OuterVm事件。

一个简单的选择是订阅事件并传递它们:

class OuterVm : Notifiable
{
    public OuterVm()
    {
        // initialize _collection
        _collection.PropertyChanged += (o,e) =>
        {
            if (e.PropertyName == "Selected")
                OnPropertyChanged("Display");
        };
    }
    CollectionVm _collection;
    public Vm Display
    {
        get {return _collection.Selected; }
    }
}