1

我需要在由 OrmLite 实例化的对象上设置一个事件处理程序,并且除了访问 repo 中的每个 Get 方法(这显然不是一个好方法)之外,我无法找到一种好的方法来做到这一点。

提供一些背景知识 - 假设我有一个从数据库中提取的用户类;它还实现了 INotifyPropertyChanged。我想为该事件分配一个处理程序。从 Funq 自动填充它是理想的,但当然 OrmLite 不会要求 Funq 水合新对象。

所以我被困住了。

任何正确方向的提示将不胜感激。

4

1 回答 1

2

在我看来,您将表示逻辑与数据访问逻辑混合在一起。如果我处于您的位置,我不会尝试INotifyPropertyChanged在模型(例如您的 User 类)上实现。相反,我会创建一个ViewModel并将数据绑定逻辑放在那里(MVVM Style)。

当你开始着手时,拥有INotifyPropertyChanged数据模型并不完全合乎逻辑。例如,如果我要更新数据库记录,它不会触发此事件(但属性更改)。它在 ViewModel 上更有意义。

除了解决您的原始问题之外,它还允许您聚合、组合和过滤数据以用于显示目的,从而使构建复杂屏幕变得更加容易。如果您需要从数据库、RSS 提要、股票行情 Web API 和 twitter 中提取信息,您可以在 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 在屏幕上显示数据的上下文中编写的,但是,相同的概念适用于出于任何目的观察模型更改。

于 2013-09-20T21:29:08.953 回答