使用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并将其放在服务中