рдореИрдВ OnPropertyChanged рджреНрд╡рд╛рд░рд╛ рдмреЗрддрд╣рд╛рд╢рд╛ рдЧреБрд╕реНрд╕реЗ рдореЗрдВ рд╣реВрдБред рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рди рдХреЗрд╡рд▓ рдЗрд╕ рдХреЛрдб рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЛрдИ Intellisence рднреА рдирд╣реАрдВ рд╣реИ - рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдВрдд рддрдХ рдкреВрд░реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рддрд╛рдЗрдк рдХрд░реЗрдВ ... рдФрд░ рдпрджрд┐ рдЖрдк рдЦрд░рд╛рдм рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдмреБрд░реА рдЪреАрдЬред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛ MVVM рдореЗрдВ, рдХрд╣реАрдВ рдирд╣реАрдВ, MVVM рдХреЗ рдмрд┐рдирд╛ WPF рдореЗрдВред
рдкрд┐рдЫрд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛,
рдпрд╣рд╛рдБ рд╕реЗ рдЪреАрд░
рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдСрдирдкреНрд░реЛрдкрд░реНрдЯреА рдЪреЗрдВрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
[Conditional( "DEBUG" )]
[DebuggerStepThrough]
public void VerifyPropertyName( string propertyName)
{
// Verify that the property name matches a real,
// public, instance property on this object.
if (TypeDescriptor.GetProperties( this )[propertyName] == null )
{
string msg = "Invalid property name: " + propertyName;
if ( this .ThrowOnInvalidPropertyName)
throw new Exception(msg);
else
Debug.Fail(msg);
}
}
рдФрд░ рдЖрдЬ рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рдвреВрдВрдв рд▓рд┐рдпрд╛ред
рд╕рдорд╛рдзрд╛рди рд╕реБрдВрджрд░ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░рд▓рддрд╛ рд╕реЗ рднреЛрдЬ рдХреЗ рдмрд┐рдВрджреБ рдкрд░: рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕ рддрд░рд╣:
this .OnPropertyChanged(() => this .ShowOverrideButton);
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
protected void OnPropertyChanged<T>(Expression<Func<T>> property)
{
PropertyChangedEventHandler handler = this .PropertyChanged;
if (handler != null )
{
var expression = property.Body as MemberExpression;
if (expression == null )
{
throw new NotSupportedException( "Invalid expression passed. Only property member should be selected." );
}
handler( this , new PropertyChangedEventArgs(expression.Member.Name));
}
}
* This source code was highlighted with Source Code Highlighter .
рд╣реЛ рдЧрдпрд╛ред рдЖрдк OnPropertyChange рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдмрдВрдзрди рдореЗрдВ XAML рдореЗрдВ рдЕрднреА рднреА рдЦрд░рд╛рдм рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдпрд╛ рдЬрд╛рдПред