вычисляемые поля mvvm

Я использую легкий инструментарий MVVM для wpf применения, которое говорит с wcf сервером.

wcf сервер возвращает объект Человека (объект по доверенности). У этого объекта человека есть несколько областей, имени, фамилии, и т.д. и т.д. Мой viewmodel называет веб-сервис, и затем получает возвращение этой модели. Моя точка зрения связана с моделью viewmodel и областями, правильно связанными с каждым ui textbox.

все охлаждаются в тени, системные функции приятно.

две области на модели - DateOfBirth и NationalIDNumber (к вашему сведению: в Южной Африке можно получить дату рождения людей из идентификационного номера),

Таким образом, после вводов данных пользователем или updtes NationalIdNumber (при наличии) я хотел бы, чтобы DOB был определен также.

Но DOB должен все еще быть нанесен на карту к начальной области, которая была возвращена из службы WCF, таким образом, я не могу только связать его с NationalIdNumber с конвертером. Это должно остаться связанным к области DOB wcf полномочия так, чтобы это могло быть сохранено назад.

как лучше всего я должен осуществить это?

Если бы это было не mvvm проект, я просто поместил бы событие на текстовые поля IDNumber так, чтобы, если он освобождает центр, попытка вычислила, dob от него (не могло бы всегда быть возможным, если текст в нем - мусор), и затем перепишите ценность Доба textbox.

Я думал о просто щипании объектов Человека сеттер NationalIdNumber, но это будет удалено минута, я обновляю ссылку веб-сервиса

Спасибо

0
добавлено
Просмотры: 2
nl ja de

2 ответы

У вас может быть недвижимость Человека в вашей модели представления:

ViewModel:

public class PersonViewModel : INotifyPropertyChanged
{
    Person person = new Person();
    public Person Person
    {
        get
        {
            return person;
        }
        set
        {
            person = value;
            NotifyPropertyChanged("Person");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Представление:


Таким образом каждый раз, когда вы обновляете недвижимость Человека, сеттера Человека вызовут.

...

Отредактируйте:

Используя MvvmLight:

ViewModel:

public class PersonViewModel : ViewModelBase
{
    Person person = new Person();
    public Person Person
    {
        get
        {
            return person;
        }
        set
        {
            person = value;
            RaisePropertyChanged("Person");
        }
    }
}

Представление:


1
добавлено
спасибо. мой сеттер Человека не получает названное примечание tho., что мой viemodel уже расширяет абстрактный класс ViewModelBase от mvvm легкого инструментария. я не знаю, связывается ли это с ним.....?
добавлено автор Crudler, источник
спасибо, делает то, в чем я нуждаюсь теперь, но это, моя проблема была вызвана некоторым другим материалом, который я имел в модели. работы как u сказали теперь. tx
добавлено автор Crudler, источник
Я попробовал mvvm светом, и он работает. См. мой отредактированный ответ и сообщите мне, работает ли он.
добавлено автор Vano Maisuradze, источник
  public class PropertyHelpersViewModel : INotifyPropertyChanged
    {
        private string text;
        public string Text
        {
            get { return text; }
            set
            {
                if(text != value)
                {
                    text = value;
                    RaisePropertyChanged("Text");
                }
            }
        }

        protected void RaisePropertyChanged(string propertyName)
        {
            var handlers = PropertyChanged;
            if(handlers != null)
                handlers(this, new PropertyChangedEventArgs(propertyName));
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
1
добавлено
Спасибо! тогда я был, делают каики даты?
добавлено автор Crudler, источник
в Наборе {} содержание.....
добавлено автор Sanjay Patel, источник