【发布时间】:2018-03-01 12:11:47
【问题描述】:
假设我有以下类(模型)
public class Employee : ObservableBase {
private int _id;
public int Id {
get { return _id; }
set { this.Update( x => x.Id, ( ) => _id = value, _id, value ); }
}
private string _name;
public string Name {
get { return _name; }
set { this.Update( x => x.Name, ( ) => _name = value, _name, value ); }
}
private EmployeeStatus _level;
public EmployeeStatus Level {
get { return _level; }
set { this.Update( x => x.Level, ( ) => _level = value, _level, value ); }
}
private RecordState _state;
public RecordState State {
get { return _state; }
set { this.Update( x => x.State, ( ) => _state = value, _state, value ); }
}
}
public class Enums {
public enum EmployeeStatus {
Junior = 1,
Medior = 2,
Senior = 3
}
public enum RecordState {
Add = 1,
Edit = 2,
Delete = 3
}
}
我编写了一个包装类,以便能够公开额外的属性(确定可见性并在某些控件的视图上禁用/启用):
public class EmployeeCustom : ObservableBase {
private Employee _employee;
public Employee Employee {
get { return _employee; }
set { this.Update( x => x.Employee, ( ) => _employee = value, _employee, value ); }
}
public Visibility SeniorTestVisible {
get { return Employee.Level == EmployeeStatus.Senior && Employee.State == RecordState.Add ? Visibility.Visible : Visibility.Collapsed; }
}
}
我的 EmployeeCustom 类在我的视图中用作 DataContext 如何确定我的 State 或 Level 何时发生变化,以便在 Employee 对象中的任何这些属性发生变化时,我的 SeniorTestVisible 可以“刷新”。请注意,我不允许对 Employee Class 进行任何更改。仅在 EmployeeCustom 中。
【问题讨论】:
-
这听起来像是你的作业?
-
您的
INotifyPropertyChanged实施在哪里? -
与其重新发明轮子,不如考虑使用 mvvmlight,然后研究 RaisePropertyChanged 功能。这样,您可以更新一个属性并强制同时将另一个属性视为已更新。
标签: c# wpf properties observable