如何使可观察集合与存储库同步

时间:2018-03-06 20:13:10

标签: c# mvvm repository-pattern

使用MVVM和存储库模式时,我觉得我必须两次处理我的项目列表。这似乎很简单,但我找不到任何关于这个问题的例子/解决方案/想法。

我有一个存储库界面:

public interface IPositionRepository
{
    IEnumerable<Position> getAll();
    void Add(Position position);
}

和ModelView,它包含一个ObservableCollection

当我添加一个新职位时,我首先要将它添加到存储库,然后将其添加到ObservableCollection中 - 感觉就像我做了两次相同的事情。

示例:

class ManagePositionsViewModel : INotifyPropertyChanged
{
    private IPositionRepository _positionRepository;
    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    public Command AddNew { get; private set; }

    public ManagePositionsViewModel()
    {
        _positionRepository = RepositoriesFactory.getPositionRepository();
        _positions = new ObservableCollection<Position>();
        AddNew = new Command(OnAddNew);
        Positions = new ObservableCollection<Position>(_positionRepository.getAll());
    }

    private ObservableCollection<Position> _positions;
    public ObservableCollection<Position> Positions
    {
        get
        {
            return _positions;
        }
        set
        {
            if (value == null) return;
            _positions = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Positions"));
        }
    }

    private void OnAddNew()
    {
        Position positionToAdd = new Position("test");
        _positionRepository.Add(positionToAdd);
        Positions.Add(positionToAdd);
    }

我觉得我在做某事&#34;错误&#34;这里。有没有办法将数据保存在存储库后面(在内存/数据库/文件中 - 但是实现了存储库接口),并且在ViewModel中同步?

repo和viewModel之间的服务只会移动&#34;丑陋的代码&#34; (做同样的事情两次:添加到repo,添加到私人列表)远离ViewModel并将其放在服务中

0 个答案:

没有答案