В новинку для MVVM поэтому извините мое незнание.
Я ДУМАЮ, что использую его право, но я нахожу, что мой ViewModel имеет слишком многие из них:
RaisePropertyChanged("SomeProperty")
Каждый раз, когда я установил свойство, я должен повысить то проклятое измененное свойство.
Я пропускаю дни, куда я мог просто пойти:
public int SomeInteger { get; private set;}
В эти дни я должен засунуть "RaisePropertyChanged" в везде, или мой UI не отражает изменения :(
Я делаю его неправильно, или другие люди раздражают из-за чрезмерного количества волшебных строк и старых школьных методов set свойства?
Я должен использовать свойства зависимости вместо этого? (Я сомневаюсь, что это помогло бы коду чрезмерно увеличиться в размерах так или иначе),
Несмотря на эти проблемы я все еще думаю, что MVVM является способом пойти так, я предполагаю, что это - что-то.
Взгляните на это Какое лучшее или самое интересное использование методов расширения вы видели? .
Он описывает метод расширения и вспомогательный метод, которые мои классы Model и ViewModel используют для включения следующих строго типизированных (без магической строки) свойств.
private string _name;
public string Name
{
get { return _name; }
set { this.NotifySetProperty(ref _name, value, () => this.Name); }
}
Это настолько просто, насколько я думаю. Надеюсь, это поможет.
Это помогает взглянуть на вещи с другой точки зрения: это не сложные свойства .NET, а упрощенные свойства зависимостей.
Привязываемые свойства модели представления в WPF не идентичны свойствам .NET, а представляют собой своего рода хранилище значений ключей. Если вам нужна легкая альтернатива DependencyObject, у вас есть возможность реализовать это хранилище ключей и значений, просто купив вызов определенной функции в установщиках - на самом деле, неплохо. Конечно, тоже далеко не идеально, но ваша точка зрения определенно несправедлива.
Вы можете использовать атрибут PostSharp NotifyPropertyChanged. Затем все, что вам нужно сделать, это добавить атрибут в класс и все. Например: [
[NotifyPropertyChanged]
public class MyClass
{
public string MyProperty { get; set; }
}
]