INotifyPropertyChanged の厳密に型指定された実装を実装しましたが、インターフェイスを使用する代わりに、実装する基本クラスを追加しました。
それは正常に動作しますが、私が苦労しているのは、ベースメソッドの宣言で TValue が使用されている理由です (オンラインで見つけたコードからこのセクションを使用しました)。
NotifyPropertyUpdate<TValue>(
...
しかし、派生クラスでは、渡す必要はまったくありませんTValue
!
ビルド時に不平を言うのではなく、実行時にこれを解決するようにコンパイラに指示するものは何ですか?
ありがとう、
基本クラス:
public class NotifyFuncPropertyChanged<T> : INotifyPropertyChanged
{
#region Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyUpdate<TValue>(Expression<Func<T, TValue>> selector)
{
//get memberInfo from object selection
MemberInfo memberInfoSelection;
Expression body = selector;
if (body is LambdaExpression)
{
body = ((LambdaExpression)body).Body;
}
switch (body.NodeType)
{
case ExpressionType.MemberAccess:
memberInfoSelection =((MemberExpression)body).Member;
break;
default:
throw new InvalidOperationException();
}
//send notifyupdate to memberInfo
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(memberInfoSelection.Name));
}
}
#endregion
}
使い方(派生クラス)
public class NameTest : NotifyFuncPropertyChanged<NameTest>
{
public string Name { get; set; }
public void TestUpdateName()
{
this.NotifyPropertyUpdate(x => x.Name);
}
}