Имя свойства INotifyPropertyChanged - hardcode по сравнению с отражением?

Найдите свой SDK здесь. Скопируйте и вставьте его в путь расположения SDK. C: \ Users \ YourUserName \ AppData \ Local \ Android \ Sdk

не забудьте установить флажок Показать скрытые папки внутри вашей папки в меню Control Control.

41
задан Kerry Jenkins 26 September 2008 в 19:15
поделиться

4 ответа

Возможно, вы заинтересуетесь этим обсуждением о

«Наилучшие практики: как правильно реализовать INotifyPropertyChanged?»

тоже.

3
ответ дан 27 November 2019 в 00:10
поделиться

Еще один ОЧЕНЬ КРАСИВЫЙ метод, о котором я могу подумать, это

Автоматическая реализация INotifyPropertyChanged with Aspect
AOP: Аспектно-ориентированное программирование

Хорошая статья о codeproject: AOP Реализация AOP INotifyPropertyChanged

4
ответ дан 27 November 2019 в 00:10
поделиться

Если вы можете отменить то, что вы сделали, сделайте это (например, переместите файл назад). РЕДАКТИРОВАТЬ: В случае, когда вы перемещаете файлы, и вы внесли изменения в эти файлы, это (по сути) ваш единственный вариант!

В противном случае вам придется выполнить возврат, чтобы отменить внесенные вами изменения в репозиторий, а затем используйте команды Tortoise.

В качестве примечания, если вы используете Visual Studio, я считаю, что Ankhsvn - действительно хороший способ не «забыть» сделать это. subversion way - перемещение, переименование и удаление - все с помощью команд svn.

m еще не делает - я намерен добавить код, который проверяет наличие отладочных сборок, что имя свойства для предоставленного объекта PropertChangedEventArgs совпадает со свойством, в котором он используется - на данный момент с помощью этого кода разработчик все еще может предоставить неправильный объект.

Проверьте это:

    public class Observable<T> : INotifyPropertyChanged
    where T : Observable<T>
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected static PropertyChangedEventArgs CreateArgs(
        Expression<Func<T, object>> propertyExpression)
    {
        var lambda = propertyExpression as LambdaExpression;
        MemberExpression memberExpression;
        if (lambda.Body is UnaryExpression)
        {
            var unaryExpression = lambda.Body as UnaryExpression;
            memberExpression = unaryExpression.Operand as MemberExpression;
        }
        else
        {
            memberExpression = lambda.Body as MemberExpression;
        }

        var propertyInfo = memberExpression.Member as PropertyInfo;

        return new PropertyChangedEventArgs(propertyInfo.Name);
    }

    protected void NotifyChange(PropertyChangedEventArgs args)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, args);
        }
    }
}

public class Person : Observable<Person>
{
    // property change event arg objects
    static PropertyChangedEventArgs _firstNameChangeArgs = CreateArgs(x => x.FirstName);
    static PropertyChangedEventArgs _lastNameChangeArgs = CreateArgs(x => x.LastName);

    string _firstName;
    string _lastName;

    public string FirstName
    {
        get { return _firstName; }
        set
        {
            _firstName = value;
            NotifyChange(_firstNameChangeArgs);
        }
    }

    public string LastName
    {
        get { return _lastName; }
        set
        {
            _lastName = value;
            NotifyChange(_lastNameChangeArgs);
        }
    }
}
14
ответ дан 27 November 2019 в 00:10
поделиться

Взгляните на это сообщение в блоге: http://khason.net/dev/inotifypropertychanged-auto-wiring-or-how-to-get-rid-of-redundant-code

0
ответ дан 27 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

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