我需要在OrmLite实例化的对象上设置一个事件处理程序,并且无法找到一个很好的方法来执行它,而不是访问repo中的每个Get方法(这显然不是一个好方法)。
给出一些背景 - 比如我有一个用户类,它是从数据库中提取的;它还实现了INotifyPropertyChanged。我想为该事件分配一个处理程序。从Funq自动填充它将是理想的,但当然OrmLite不会要求Funq保湿新物体。
所以我被卡住了。
任何正确方向的提示都将受到赞赏。
答案 0 :(得分:2)
在我看来,就像你将表示逻辑与数据访问逻辑混合在一起一样。如果我在你的位置,我不会尝试在模型(例如你的用户类)上实现INotifyPropertyChanged
。相反,我会创建一个ViewModel
并将数据绑定逻辑放在那里(MVVM Style)。
在数据模型中使用INotifyPropertyChanged
在您开始使用它时并不合乎逻辑。如果我要更新数据库记录,则不会触发此事件(但属性已更改)。它在ViewModel上更有意义。
除了解决原始问题之外,它还可以让您聚合,撰写和过滤数据以便显示,从而使构建复杂屏幕变得更加容易。如果您需要从数据库,RSS源,股票行情网络API和推特中提取信息,您可以在ViewModel中执行此操作。
public class User
{
[AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
}
public class UserViewModel : INotifyPropertyChanged
{
private string _name;
public UserViewModel(User user)
{
_name = user.Name;
}
public string Name
{
get { return _name; }
set {
if (value == _name) return;
_name = value;
OnPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
小注意:此答案是在带有ViewModel的屏幕上显示数据的上下文中编写的,但是,相同的概念适用于出于任何目的观察模型更改。