WPF INotifyPropertyChanged двухстороннее связывание странное действие

Это наиболее обсуждаемый аспект спецификации Selectors Level 4. С помощью этого селектора вы сможете стилизовать элемент в соответствии с его дочерним элементом, используя восклицательный знак после данного селектора (!).

Например:

body! a:hover{
   background: red;
}

установит красный цвет фона, если пользователь наводится на любой якорь.

Но нам нужно ждать реализации браузеров: (

0
задан M. Ko 28 March 2019 в 04:17
поделиться

2 ответа

Пожалуйста, добавьте название собственности, как это.

public class Model : Notifier, IDataErrorInfo
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; OnPropertyChanged("Name"); }
    }
}
0
ответ дан Hemang Aghera 28 March 2019 в 04:17
поделиться

Основная проблема реализации 1 состоит в том, что строковым параметром вашего метода OnPropertyChanged должно быть точное имя свойства, которое изменяется. Для ваших двух примеров "model_changed" следует изменить на "Model", а "name_changed" - "Name". Вот два отличных метода, чтобы смягчить потенциальную человеческую ошибку с помощью набора буквенных имен строк:

1. Используйте атрибут CallerMemberName

Если вам разрешено и у вас есть доступ к пространству имен System.Runtime.CompilerServices, вы можете написать свой базовый класс как таковой, чтобы имя свойства автоматически передавалось как строковый параметр OnPropertyChanged method:

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class Notifier : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string pName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pName));
    }
}

Затем вы можете просто позвонить OnPropertyChanged() в получатель вашей собственности.

2. Используйте ключевое слово nameof

В качестве альтернативы, вы можете просто заменить имя свойства с буквенным типом на nameof(<InsertPropertyNameHere>), которое будет возвращать имя без какого-либо риска опечатки, как в этом примере:

[111 ]
0
ответ дан Paul Karkoska 28 March 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: