4

バインディング式のソース プロパティ タイプを調べようとしています。これを行うのは、UpdateSourceExceptionFilterを使用して、一般的な「変換できませんでした」よりも有用なエラー メッセージを提供したいからです。

.NET 4.5 では、ResolvedSourceResolvedSourcePropertyNameをリフレクションと共に使用して、次のようなソース プロパティ タイプを取得します。

PropertyInfo sourceProperty = expr.ResolvedSource.GetType().GetProperty(expr.ResolvedSourcePropertyName);
Type propertyType = sourceProperty.PropertyType;

これはうまくいきます。ただし、これらの BindingExpression プロパティは両方とも .NET 4.5 で導入されたばかりで、私はまだ 4.0 を使用しています (Windows XP のため、実際には更新できません)。

では、.NET 4.0 でこれを行う良い方法はありますか? リフレクションを使用して内部SourceItemおよびSourcePropertyNameプロパティを取得するか、Workerそれらの値を取得するためにプライベートを取得することを考えましたが、内部/プライベート プロパティまたはフィールドへのアクセスは避けたいと思います (また、これには信頼について何かをする必要があると思いますか?どのような影響がありますか? ?)。

4

3 に答える 3

5

Not too pretty, but without access to private methods:

string[] splits = expr.ParentBinding.Path.Path.Split('.');
Type type = expr.DataItem.GetType();
foreach (string split in splits) {
    type = type.GetProperty(split).PropertyType;
}

Thus, we are able to resolve the source property.

于 2013-05-21T18:04:26.823 に答える
0

内部/プライベート .NET オブジェクトから独立した 1 つのソリューションを次に示します。

プロパティexpr.ResolvedSourcenullDataContext親コントロールから使用される場合なので、役に立ちません。

ソースタイプを見つける理由は何ですか?

simple を使用しないのはなぜString.Format("Binding has exception in path {0}", expr.ParentBinding.Path.Path?? String.Empty)ですか?

于 2013-05-22T03:20:36.337 に答える