gpt4 book ai didi

C# 触发 RaisePropertyChanged 的​​ parent 从 child ?

转载 作者:行者123 更新时间:2023-11-30 21:44:56 26 4
gpt4 key购买 nike

我有这段代码,其中有我的 ViewModel,而 ViewModel 有一个属性,它可以获取它的所有属性。

这是粗略的伪代码:

public class MyClassViewModel : INotifyPropertyChanged
{

public MyClassViewModel ()
{

}

public BaseClass myClassBase { get ; set; }

public string Title
{
get
{
return myClassBase.Title;
}
set
{
myClassBase.Title = value;
RaisePropertyChanged("Title");
}
}

public string Description
{
get
{
return myClassBase.Description;
}
set
{
myClassBase.Description = value;
RaisePropertyChanged("Description");
}
}
}

这是基类:

public class BaseClass
{
public BaseClass()
{

}

public string Title {get;set;}
public string Description {get;set;}
}

CheckItemViewModel 是绑定(bind)到 UI 的模型。因此,如果我执行类似 MyClassViewModel .Title = "Test"; 的操作,它会正确刷新 UI。

但是,出于特定原因(Javascript - Chakra 接口(interface)),我需要执行类似MyClassViewModel.myClassBase.Title = "Test" 的操作。问题是 UI 不再刷新,因为它没有 RaisePropertyChanged。

即使我在 BaseClass 内部实现了 RaisePropertyChanged 本身,它仍然不起作用。它不起作用,因为 BaseClass 中的 PropertyChanged 始终为 null

我怀疑这是因为 MyClassViewModel 是绑定(bind)到 UI 的。所以 BaseClass 中的 PropertyChanged 永远不会被绑定(bind)。

有没有办法触发 Parent 的 RaisePropertyChanged?

谢谢

最佳答案

我建议在两个类上实现 INotifyPropertyChanged,然后让 MyClassViewModel 订阅 BaseClass 中的事件并将其转发到 UI:

public class MyClassViewModel : INotifyPropertyChanged, IDisposable
{
private BaseClass myClassBase;

public void Dispose()
{
if (myClassBase != null) myClassBase.PropertyChanged -= OnBaseClassPropertyChanged;
}

public BaseClass MyClassBase {
get {
return myClassBase;
}

set {
if (myClassBase != null) myClassBase.PropertyChanged -= OnBaseClassPropertyChanged;
myClassBase = value;
myClassBase.PropertyChanged += OnBaseClassPropertyChanged;
}
}

private void OnBaseClassPropertyChanged(object sender, PropertyChangedEventArgs args) {
RaisePropertyChanged(args.PropertyName);
}

// forwarded properties (Title and Description) go here
}

关于C# 触发 RaisePropertyChanged 的​​ parent 从 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com