Фрагмент кода MVVM Light (mvvvminpcset). Нужен пример использования - PullRequest
0 голосов
/ 09 мая 2020

В наборе инструментов MVVM Light вместе с mvvmincp есть такой фрагмент кода под названием mvvminpcset .

inpcset сам фрагмент

 public const string MyPropertyPropertyName = "MyProperty";

        private bool _myProperty = false;

        public bool MyProperty
        {
            get
            {
                return _myProperty;
            }
            set
            {
                Set(MyPropertyPropertyName, ref _myProperty, value);
            }
        }

Может ли кто-нибудь показать пример использования? Хотелось бы узнать, какую практическую пользу приносит использование упомянутого выше фрагмента.

Спасибо

inp c simple

 public const string MyPropertyPropertyName = "MyProperty";

    private bool _myProperty = false;
    public bool MyProperty
    {
        get
        {
            return _myProperty;
        }

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

            _myProperty = value;
            RaisePropertyChanged(MyPropertyPropertyName);
        }
    }


inpcset с методом

  public const string MovedPropertyName = "Moved";

        private bool _moved = false;
        public bool Moved
        {
            get
            {
                return _moved;
            }
            set
            {
                Set(MovedPropertyName, ref _moved, value);

                MovedOn();
            }
        }


        private void MovedOn()
        { 

          // do something

        }

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Это просто синтаксис c сахар для способа, которым вы обычно реализуете INP C:

private bool _MyProperty;
public bool MyProperty
{
    get { return this._MyProperty; }
    set
    {
        if (this._MyProperty != value)
        {
            this._MyProperty = value;
            RaisePropertyChanged(() => this.MyProperty);
        }
    }
}

Лично я предпочитаю обычную / подробную реализацию, а не Set, по той единственной причине, что мне нравится возможность размещать точки останова, срабатывающие только при фактическом изменении значения свойства поддержки.

0 голосов
/ 09 мая 2020
  1. Set () сравнивает новое значение с текущим и запускается, только если другое
  2. также Set () отправляет оба события
    RaisePropertyChanging(propertyExpression);
    field = newValue;
    RaisePropertyChanged(propertyExpression);

и если у вас есть код соглашение о стилях, которое вы можете принудительно использовать, используя только один из методов

  1. MyPropertyPropertyName = "MyProperty" is fr agile против рефакторинга вы можете использовать nameof (MyProperty) или () => this.ID
  2. с Set () у вас есть 1 строка кода против нескольких строк кода, также можно добавить ошибку
  3. , вероятно, вы будете использовать фрагмент кода для генерации кода для свойства INP C, и нет разница на данный момент

, поэтому вы решите использовать этот

public int Id
{
    get => _entity.Id;
    set => Set(ref _entity.Id, value);
}

обновленный

Я думаю, вы были введены в заблуждение, указав имя INP C, потому что MVVM разделяет способ обновления представления и выполнение команд

  1. если у вас есть модель представления, вы можете обновить представление. вы устанавливаете свойство и устанавливаете представление уведомления для обновления
  2. , когда просмотру нужно отправить что-то обратно, например, щелчок по кнопке, просмотр, использование свойства ICommand в вашей модели просмотра, чтобы вызвать что-то

есть Для многих деталей, я думаю, вам нужно взять в руки некоторые рабочие пример и прочитать о mvvm что-то вроде this

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