INPC استاندارد با بهره گیری از صفت CallerMemberName
نویسنده: محسن افشین
تاریخ: ۱۳۹۴/۰۴/۱۷ ۱۵:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
private void A ( [CallerMemberName] string callerName = "")
{
Console.WriteLine("Caller is " + callerName);
}
private static void B()
{
// let's call A
A();
} public class PersonViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string name;
public string Name
{
get { return name; }
set
{
this.name = value;
OnPropertyChanged("Name");
}
}
} private string firstName;
public string FirstName
{
get { return firstName; }
set
{
this.firstName = value;
OnPropertyChanged("Name");
}
} public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
OnPropertyChangedExplicit(propertyName);
}
protected void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> projection)
{
var memberExpression = (MemberExpression)projection.Body;
OnPropertyChangedExplicit(memberExpression.Member.Name);
}
void OnPropertyChangedExplicit(string propertyName)
{
this.CheckPropertyName(propertyName);
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
#region Check property name
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void CheckPropertyName(string propertyName)
{
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
throw new Exception(String.Format("Could not find property \"{0}\"", propertyName));
}
#endregion // Check property name
} public class PersonViewModel : ViewModelBase
{
private string firstName;
public string FirstName
{
get { return firstName; }
set
{
this.firstName = value;
OnPropertyChanged();
OnPropertyChanged(() => this.FullName);
}
}
private string lastName;
public string LastName
{
get { return lastName; }
set
{
this.lastName = value;
OnPropertyChanged();
OnPropertyChanged(() => this.FullName);
}
}
public string FullName
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
}