仅查看Model OnPropertyChanged上的更新,但不查看ViewModel OnPropertyChanged中的更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅查看Model OnPropertyChanged上的更新,但不查看ViewModel OnPropertyChanged中的更新相关的知识,希望对你有一定的参考价值。
我有一个ViewModel托管Model类的属性,其中ViewModel和Model都实现了INotifyPropertyChanged
。
但是,如果模型中的属性已更改,则View仅更新。如果在ViewModel中更改了属性,则不会更新视图。
型号基础:
public class BaseModel : INotifyPropertyChanged
{
private int id;
public int Id
{
get { return id; }
set { id = value; OnPropertyChanged(new PropertyChangedEventArgs("Id")); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyChangedEventArgs.PropertyName));
}
}
模型(添加和删除Positionen-Collection显示在视图中):
public class ChildModel : BaseModel
{
private ObservableCollection<SubModel> positionen;
public ObservableCollection<SubModel> Positionen
{
get { return positionen; }
set { positionen = value; OnPropertyChanged(new PropertyChangedEventArgs("Positionen")); }
}
}
ViewModel基础:
public abstract class BaseViewModel<T> where T : BaseModel , INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
PropertyChanged?.Invoke(this, propertyChangedEventArgs);
}
public abstract ObservableCollection<T> DatensatzListe { get; set; }
public abstract T AktuellerDatensatz { get; set; }
}
ViewModel子项(此处属性的更新未显示在视图中):
public class ChildViewModel : BaseViewModel<ChildModel >
{
public override ObservableCollection<ChildModel > DatensatzListe
{
get { return DatensatzListe; }
set { DatensatzListe = value; }
}
private ChildModel aktuellerDatensatz;
public override ChildModel AktuellerDatensatz
{
get { return aktuellerDatensatz; }
set { aktuellerDatensatz = value; OnPropertyChanged(new PropertyChangedEventArgs("AktuellerDatensatz")); }
}
private string tesxt;
public string Tesxt
{
get { return tesxt; }
set { tesxt = value; OnPropertyChanged(new PropertyChangedEventArgs("Tesxt")); }
}
}
如果我更新后面的代码中的文本属性,更新不会显示在视图中。我更新Aktueller Datensatz.Is,变化显示得很好。
我怎样才能解决这个问题。如果需要更多代码,请告诉我。
根据以下定义,
public abstract class BaseViewModel<T> where T : BaseModel , INotifyPropertyChanged
BaseViewModel
不是来自INotifyPropertyChanged
所以观点不知道它的变化。
在上面的代码中,INotifyPropertyChanged
是对T
的约束,其中T
必须来自BaseModel
和INotifyPropertyChanged
更新到
public abstract class BaseViewModel<T>: INotifyPropertyChanged
where T : BaseModel
因为BaseModel
已经来自INotifyPropertyChanged
以上是关于仅查看Model OnPropertyChanged上的更新,但不查看ViewModel OnPropertyChanged中的更新的主要内容,如果未能解决你的问题,请参考以下文章
实时监听输入框值变化的完美方案:oninput & onpropertychange
oninputonchange与onpropertychange事件的区别
使用 onpropertychange 和 oninput 检测 inputtextarea输入改变
实时监听输入框值变化:oninput & onpropertychange