代码之家  ›  专栏  ›  技术社区  ›  Mister 832

仅查看已更改的模型OnPropertyChanged上的更新,但不查看已更改的ViewModelonPropertyChanged中的更新

  •  0
  • Mister 832  · 技术社区  · 7 年前

    我有一个ViewModel托管模型类的属性,其中ViewModel和模型都实现 INotifyPropertyChanged .

    模型库:

    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));
        }
    }
    

    public class ChildModel : BaseModel 
    {
    
        private ObservableCollection<SubModel> positionen;
    
        public ObservableCollection<SubModel> Positionen
        {
            get { return positionen; }
            set { positionen = value; OnPropertyChanged(new PropertyChangedEventArgs("Positionen")); }
        }
    }
    

    视图模型库:

    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 child(此处属性的更新不会显示在视图中):

    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")); }
        }
    }
    

    如果更新代码隐藏中的Tesxt属性,则更新不会显示在视图中。我更新了AktuellerDatensatz.Id,没什么变化。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Nkosi    7 年前

    根据以下定义,

    public abstract class BaseViewModel<T> where T : BaseModel , INotifyPropertyChanged
    

    BaseViewModel 不是从 INotifyPropertyChanged 所以这个观点并没有意识到它的变化。

    在上面的代码中 是对 T 哪里 必须从 BaseModel 更改了InotifyProperty

    更新到

    public abstract class BaseViewModel<T>: INotifyPropertyChanged 
        where T : BaseModel
    

    基本模型 已经派生自