2011-09-14 8 views
0

私はプロジェクトをSilverlightからWPFに移していますが、私は問題に遭遇しました。Wpfで既定のバインディングコンバータを設定する方法?

私は、InotifyPropertyChangedプロパティでGeoRect型のGeoRectを持つコントロールを持っています。 GeoRectには、IGeoPosition型の各コンストラクタに設定されたさまざまなパブリックプロパティがあります。

私はそうのようなこれらのプロパティのいずれかに結合設定しています:デフォルトのToStringメソッドは、毎回GeoRectプロパティが変更IGeoPositionインスタンス上で呼び出されたSilverlightで

<TextBlock Text="{Binding GeoRect.TopRight, ElementName=x_SomeControl}"></TextBlock> 

を。 Wpfでは、私は全くテキストを取得しません。

これをWpfで修正するには、オブジェクトのToStringメソッドを単に呼び出すTextBlockにValueConverterを追加しますが、これは不要な太っているようです。誰も助けることができますか?

答えて

1

あなたのバインディングには別の問題があると思われます。またWPFでは、データバインディングはToString()メソッドを呼び出して、テキストコントロールのテキストを構築します。
ビジュアルスタジオの出力ウィンドウでバインディングエラーを確認しましたか?または、GeoRectクラスがTopRightプロパティのINotifyPropertyChangedをサポートしていない可能性がありますか?

+0

お返事ありがとうございます。私はWPFがそのように振る舞うべきだと思った。 TopRightプロパティのバッキングフィールドは、コンストラクタでのみ設定されます。文字列を返すようにプロパティを変更して(そして、バッキングフィールドオブジェクトのToStringメソッドを返す)、正しい結果が得られます。これは、インタフェースが処理されている途中のものであるように見えます。神秘的な! –

0

ElementName=x_SomeControlGeoRect.TopRightは、「ソースとパス」の組み合わせエラーが発生する可能性があります。 x_SomeControlに「GeoRect」というプロパティがありますか? x_SomeControl.GeoRectもnullではないですか? x_SomeControl.GeoRect.TopRightには正しい値がありますか?

HCLが指摘しているように、このバインディングでBindingExpressionエラーが発生した出力ウィンドウを表示すると、これが明らかになります。

ご確認ください。

+0

お返事ありがとうございます。出力ウィンドウは私の最初の呼び出しでしたが、運はありません。私はGeoRectがnullではないと確信しています。なぜなら、バインディングに値コンバータを追加すると、スヌープすることができ、そうでないことがわかるからです。実際にValueConverterでToStringを呼び出すと動作します。 –

関連する問題