Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Setters can be replaced with one-liners:</p> <pre><code> private string foo; public string Foo { get { return foo; } set { Setter(v =&gt; foo = v, value, () =&gt; Foo, () =&gt; Bar); } } </code></pre> <p>e.g.:</p> <pre><code> set { Setter( v =&gt; SetLang(this.TabAccountLangs, "TextAccount", v), value, () =&gt; Foo ); </code></pre> <p>"Setter" is the method in base class:</p> <pre><code>public abstract class BaseObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void Setter&lt;T&gt;( Action&lt;T&gt; setter, T newVal, Expression&lt;Func&lt;T&gt;&gt; property, params Expression&lt;Func&lt;object&gt;&gt;[] dependentProperties ) { if ( !equals( getPropValue( property ), newVal ) ) { setter( newVal ); notifyDependentProps( property, dependentProperties ); } } private static string getPropertyName&lt;Tz&gt;( Expression&lt;Func&lt;Tz&gt;&gt; property ) { return getPropertyInfo( property ).Name; } private static PropertyInfo getPropertyInfo&lt;T&gt;( Expression&lt;Func&lt;T&gt;&gt; property ) { MemberExpression expression; var body = property.Body as UnaryExpression; if ( body != null ) expression = (MemberExpression) body.Operand; //for value types else expression = ( (MemberExpression) property.Body ); var pi = expression.Member as PropertyInfo; if ( pi == null ) throw new ArgumentException( "expression must be valid property" ); return pi; } private void valueChanged&lt;Ta&gt;( Expression&lt;Func&lt;Ta&gt;&gt; property ) { if ( PropertyChanged != null ) PropertyChanged( this, new PropertyChangedEventArgs( getPropertyName( property ) ) ); } private void notifyDependentProps&lt;T&gt;( Expression&lt;Func&lt;T&gt;&gt; property, Expression&lt;Func&lt;object&gt;&gt;[] dependentProps ) { valueChanged( property ); if ( dependentProps != null &amp;&amp; dependentProps.Length &gt; 0 ) { for ( int index = 0; index &lt; dependentProps.Length; index++ ) valueChanged( dependentProps[index] ); } } private T getPropValue&lt;T&gt;( Expression&lt;Func&lt;T&gt;&gt; property ) { PropertyInfo pi = getPropertyInfo( property ); return (T) pi.GetValue( this, new object[] {} ); } private bool equals&lt;T&gt;( T first, T second ) { return EqualityComparer&lt;T&gt;.Default.Equals( first, second ); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload