/// <summary> /// 依存するモデルのプロパティ値が変更されたときに呼ばれます。 /// </summary> private void RaiseDependPropertyChanged( object sender, PropertyChangedEventArgs e, PropertyChangedEventHandler callback) { var key = new TypeProperty(sender.GetType(), e.PropertyName); // 変更されたプロパティに依存するプロパティを探し、 // もしなかったらそのまま帰ります。 var propertySet = FindDependProperties(this.GetType(), key); if (propertySet == null) { return; } // 対象モデルのプロパティに依存したすべてのプロパティに // 変更通知を出します。 foreach (var propertyName in propertySet) { // 依存メソッドは自クラスのもののみ調べているため、 // 対象オブジェクトはthisになります。 callback( this, new PropertyChangedEventArgs(propertyName)); } }
/// <summary> /// Type.op_EqualityがMONOだと使えないため。 /// </summary> public bool Equals(TypeProperty other) { if ((object)other == null) { return(false); } return( Util.GenericEquals(Type, other.Type) && PropertyName == other.PropertyName); }
/// <summary> /// 与えられたプロパティに依存するプロパティのリストを取得します。 /// </summary> private HashSet <string> FindDependProperties( Type targetType, TypeProperty property) { var dependMap = GetDependPropertyMap(targetType); if (dependMap == null) { throw new RagnarokException( "依存モデルのプロパティリストが取得できませんでした。"); } return(dependMap.GetValues(property, false)); }