Как мне поддерживать мой DataService в актуальном состоянии с ObservableCollection? - PullRequest
0 голосов
/ 04 мая 2010

У меня есть класс CustomerService, который просто читает набор клиентов из файла или создает его и передает его обратно в основное представление модели, где он превращается в ObservableCollection. Как лучше всего убедиться, что элементы в CustomerService и ObservableCollection синхронизированы. Я предполагаю, что мог бы подключить объект CustomerService для ответа на RaisePropertyChanged, но разве это не только для использования с элементами управления WPF? Есть ли лучший способ?

using System;

public class MainModelView
{
    public MainModelView()
    {
        _customers = new ObservableCollection<CustomerViewModel>(new CustomerService().GetCustomers());
    }

    public const string CustomersPropertyName = "Customers"
    private ObservableCollection<CustomerViewModel> _customers;
    public ObservableCollection<CustomerViewModel> Customers
    {
        get
        {
            return _customers;
        }

        set
        {
            if (_customers == value)
            {
                return;
            }

            var oldValue = _customers;
            _customers = value;

            // Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
            RaisePropertyChanged(CustomersPropertyName, oldValue, value, true);
        }
    }
}

public class CustomerService
{
        /// <summary>
        /// Load all persons from file on disk.
        /// </summary>

        _customers = new List<CustomerViewModel>
                       {
                           new CustomerViewModel(new Customer("Bob", "" )),
                           new CustomerViewModel(new Customer("Bob 2", "" )),                           
                           new CustomerViewModel(new Customer("Bob 3", "" )),                       
                       };

        public IEnumerable<LinkViewModel> GetCustomers()
        {
            return _customers;
        }
}

1 Ответ

2 голосов
/ 05 мая 2010

Обработка события CollectionChanged для «Клиентов». Когда он изменится, позвоните в службу, чтобы синхронизировать его.

При связывании ваших "Клиентов" убедитесь, что вы указали "Mode = TwoWay" в своем xaml.

...