Привязка данных WPF к внешней модели данных - PullRequest
1 голос
/ 17 мая 2009

Я недавно начал разрабатывать приложение, использующее WPF, и я действительно могу сосредоточиться на следующем:

У меня есть доменная модель моего приложения, которая представляет собой простые объекты POCO, сериализованные на / с жесткого диска. Затем у меня есть приложение WPF, и я хотел бы связать его с различными частями модели. Мне нужно иметь возможность уведомлять пользовательский интерфейс об изменениях в базовой модели (например, реализовать INotifyPropertyChanged), НО, я хочу сделать это, не мешая моей модели (читать без изменения текущей реализации модели). Как я могу реализовать уведомление об изменениях, кроме изменения модели? Причина, по которой я хочу это сделать, заключается в том, что я делюсь моделью между несколькими проектами, только один из которых является WPF, и я не хочу добавлять ненужный код в модель. Одна вещь, которая пришла мне в голову, была создать «копию» модели (с INotifyPropertyChanges, BindingLists и т. Д.), Но это, кажется, трудно поддерживать ... Заранее спасибо.

Ондрей

Ответы [ 2 ]

2 голосов
/ 17 мая 2009

Проверьте это MVVM

Скачать исходный код см. Иерархию.

По сути, вы по-прежнему сохраняете простые объекты POCO в качестве своих моделей. Затем вы создаете модель представления вокруг модели следующим образом:

public class CustomerViewModel : INotifyPropertyChanged
{
        readonly Customer _customer;
        public CustomerViewModel(Customer customer)
        {
            _customer = customer;
        }

        public string FirstName
        {
            get { return _customer.FirstName; }
            set
            {
                if (value == _customer.FirstName)
                    return;

                _customer.FirstName = value;

                OnPropertyChanged("FirstName");
            }
        }
        ...
}
0 голосов
/ 17 мая 2009

Здесь я вижу два возможных решения:

  1. Используйте отдельную модель только для экранов WPF ( Шаблон MVVM ). Это потребует поддержки двух разных моделей, а также подготовки к большому коду сопоставления.
  2. Используйте PostSharp, чтобы «улучшить» вашу модель всем необходимым стандартным кодом. Здесь вы можете найти пример автоматической реализации INotifyPropertyChanged. Помните, что внедрение PostSharp в проект является важным решением, поэтому я предлагаю сначала ознакомиться с ним.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...