Как манипулировать данными в TreeView? Должен ли я использовать ViewModelPattern? - PullRequest
2 голосов
/ 29 марта 2009

Часть редактора, который я пишу, использует Wpf-TreeView. Я использую DataBinding и ItemTemplate для заполнения TreeView. До сих пор я манипулирую ItemsSource (в основном ObeservableCollection's) прямо (используя, например, Drag & Drop). Но теперь я прочитал это , и я не уверен, что это действительно упростит, думает для меня. И прежде чем я продолжу проект, я хотел бы знать все за и против.

Если Data (ItemsSource) добавлен, отредактирован или удален, как сохранить согласованность Data и ViewModel? Это то, о чем должна заботиться ViewModel? Если я должен заботиться о консистенциях, как это упрощает мысли?

1 Ответ

4 голосов
/ 29 марта 2009

MVVM отлично подходит для разработки WPF в целом, а не только для TreeView с.

Если данные (ItemsSource) добавлены, отредактированы или удалить, как сохранить данные и ViewModel соответствует?

Не совсем точно, что вы спрашиваете здесь, но привязка WPF обрабатывает изменения коллекции, если эти коллекции реализуют INotifyCollectionChanged. ObservableCollection<T> дает вам хорошую, полезную реализацию этого интерфейса, которую вы можете использовать в своих моделях представления.

Привязки сохраняют представление в соответствии с вашей моделью представления. Как правило, вы стремитесь к тому, чтобы на ваш взгляд не было никакого кода. Ваше представление просто привязывается к свойствам модели представления, и ответственность за синхронизацию связанных свойств лежит на модели представления. Вот действительно простой пример:

public class PersonViewModel : INotifyPropertyChanged
{
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (_firstName != value)
            {
                _firstName = value;
                OnPropertyChanged("FirstName");
                OnPropertyChanged("FullName");
            }
        }
    }

    //LastName and other members omitted

    public string FullName
    {
        get { return FirstName + " " + LastName; }
    }
}

Здесь на свойство FullName влияют изменения FirstName и LastName. Представление может просто привязаться к FullName, и любые изменения двух других свойств будут видны в пользовательском интерфейсе.

Я бы посоветовал вам прочитать мой пост в блоге о POCO против DependencyObject s как просмотр моделей перед началом работы.

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