HOWTO избегать использования жестко закодированного имени свойства WPF MVVM при передаче его в качестве строкового параметра в OnPropertyChanged - PullRequest
0 голосов
/ 05 января 2019

Прежде всего, я использую .NET Framework 3.5 C # 3.0 и Visual Studio 2008.

Сказав это ... При использовании шаблона MVVM в приложениях WPF я всегда использую свойства модели представления для привязки к объектам в представлении. При вызове OnPropertyChanged из реализации набора я всегда жестко кодировал имя свойства в виде строки.

private string _myProperty;
public string MyProperty
{
   get 
   {
      return _myProperty;
   }

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

      OnPropertyChanged("MyProperty");
   }
}

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

Я знаю, что есть такие методы, как использование nameof, как объяснено здесь и здесь , но это доступно только в C # 6.0 (.NET Framework 4.6 и выше).

Также существует атрибут CallerMemberName, как объяснено здесь и здесь , но снова он был выпущен и доступен только в C # 5.0 (.NET Framework 4.5) и более поздних версиях.

Поэтому я использую .NET Framework 3.5 C # 3.0, поэтому я не могу использовать этот подход.

Итак, как я могу избежать жесткого кодирования имени свойства при передаче его в качестве параметра в метод OnPropertyChanged? Я хотел бы решение, которое не ставит под угрозу производительность.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Если вы ограничены .net 3.5, попробуйте это:

Получить имя свойства, использованное в лямбда-выражении в .NET 3.5

при условии, что вокруг свойства есть класс, это пример использования ПолучитьИмяСвойства (this.MyProperty)

это нужно использование System.Linq.Expressions; using System.Reflection; оба, кажется, там

0 голосов
/ 05 января 2019

Вы можете использовать оператор nameof, независимо от используемой платформы. Это языковая функция , а не базовая функция

OnPropertyChanged(nameof(MyProperty));

Это будет работать, потому что компилятор преобразует это выражение в строку при преобразовании его в код MSIL.

Все, что вам нужно, это Visual Studio 2015 (или, насколько я знаю, 2013 с пакетом nuget)

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