Silverlight MVVM: как избежать загрязнения моей модели при реализации «добавления нового элемента» для моей таблицы данных? - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть DataGrid. Прямо сейчас это привязка к ObservableCollection<Foo> в моей модели просто замечательно.

Но теперь я хочу реализовать удобный способ добавить новый элемент в сетку данных . Кажется, мне нужно изменить Foo для наследования от IEditableObject и INotifyPropertyChanged, что, на мой взгляд, довольно странно с точки зрения MVVM - это больше похоже на детали реализации типа представления. Но как бы то ни было, не такая уж большая сделка.

(Редактировать: уточнение; Foo в моей модели, а не модель представления.)

Но теперь я знаю, что делаю что-то не так, когда мне нужно изменить ObservableCollection<Foo> на пользовательский CollectionOfFoo с логикой для добавления пустых Foo элементов в конец коллекции всякий раз, когда пользователь фиксирует изменение, как в указанном сообщении в блоге. Этот материал определенно не принадлежит моей модели.

Как я могу реализовать такой приятный интерфейс для добавления новых элементов, сохраняя при этом мою MVVM-сущность? Я думал, может быть, какая-то обертка вокруг моей коллекции, которая реализует это, но я не уверен, как заставить эту обертку связываться с моделью ...: -S.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2009

Этот материал определенно не принадлежит моей модели.

Но это определенно относится к вашей модели. А наблюдаемая коллекция классов viewmodel - это то, к чему должна быть привязана ваша сетка данных.

Мне кажется (если Foo - это класс Model), вам нужно написать класс FooViewModel.

Другим подходом к этому может быть добавление вашего «нового» элемента в другой элемент управления, возможно, написать форму и отобразить ее поверх сетки данных всякий раз, когда пользователь решает создать новую строку?

1 голос
/ 21 декабря 2009
  1. Если вы продолжаете говорить о том, насколько "неприглядно" для ваших моделей внедрение IPC, вы навлечете на себя гнев анемичной модели толпы.
  2. Нет причины, по которой у вас не может быть ICommand в вашей виртуальной машине для создания нового экземпляра Foo для редактирования.
0 голосов
/ 21 декабря 2009

Вас не беспокоит, что ObservableCollection сама реализует INotifyPropertyChanged?

Значение - даже если это загрязняло ViewModel (а это не так), уже слишком поздно что-либо с этим делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...