MVVM-RaisePropertyChanged превращая код в беспорядок
новый для MVVM поэтому, пожалуйста, извините мое невежество.
Я думаю, что использую его правильно, но я нахожу, что моя ViewModel имеет слишком много из них:
RaisePropertyChanged("SomeProperty")
каждый раз, когда я устанавливаю свойство, я должен поднять это проклятое свойство.
Я скучаю по дням, когда я мог просто пойти:
public int SomeInteger { get; private set;}
в эти дни я должен придерживаться "RaisePropertyChanged" везде или мой пользовательский интерфейс не отражает изменения : (
Я делаю это неправильно или другие люди раздражается чрезмерным количеством магических струн и сеттеров старой школы?
должен ли я использовать свойства зависимостей вместо этого? (Я сомневаюсь, что это поможет коду раздуваться в любом случае)
несмотря на эти проблемы, я все еще думаю, что MVVM-это путь, поэтому я думаю, что это что-то.
5 ответов
взгляните на это какое лучшее или самое интересное использование методов расширения вы видели?.
он описывает метод расширения и вспомогательный метод, который мои классы Model и ViewModel используют для включения следующих строго типизированных свойств (без волшебной строки).
private string _name;
public string Name
{
get { return _name; }
set { this.NotifySetProperty(ref _name, value, () => this.Name); }
}
Это примерно так же просто, как я думаю, что это можно сделать. Надеюсь, это поможет.
вы можете использовать атрибут NotifyPropertyChanged PostSharp. Тогда все, что вам нужно сделать, это поместить атрибут в класс, и все. Например:
[NotifyPropertyChanged]
public class MyClass
{
public string MyProperty { get; set; }
}
Это помогает взглянуть на вещи с другой точки зрения: это не сложные свойства .NET, а упрощенные свойства зависимостей.
связываемые свойства модели представления в WPF не идентичны свойствам .NET, вместо этого это своего рода хранилище ключей. Если вы хотите легкую альтернативу DependencyObject, у вас есть возможность реализовать этот магазин ключей-значений просто купить вызов определенной функции в сеттерах - неплохо, на самом деле. Конечно, далеко не идеал, но ваша точка зрения безусловно несправедливо.
это не возвращает вас к чистому коду, но я использую простой метод расширения, чтобы получить имя свойства, чтобы избежать проблем с магическими строками. Он также поддерживает читаемость кода, то есть он явно показывает, что происходит.
метод расширения просто выглядит следующим образом:
public static string GetPropertyName(this MethodBase methodBase)
{
return methodBase.Name.Substring(4);
}
при этом это означает, что наборы свойств устойчивы к изменениям имен и выглядят следующим образом:
private string _name;
public string Name
{
get { return _name; }
set
{
name = value;
RaisePropertyChanged(MethodBase.GetCurrentMethod().GetPropertyName());
}
}
Я написал больше об этом метод расширения здесь а у меня опубликован соответствующий фрагмент кода здесь.
Это поможет: "вид магии" Без Усилий INotifyPropertyChanged
[http://visualstudiogallery.msdn.microsoft.com/d5cd6aa1-57a5-4aaa-a2be-969c6db7f88a][1]
в качестве примера для добавления его в одно свойство:
[Magic]
public string Name { get { return _name; } set { _name = value; } }
string _name;
еще один пример добавления его ко всем свойствам класса:
[Magic]
public class MyViewModel: INotifyPropertyChanged
{
public string Name { get; set; }
public string LastName { get; set; }
.....
}