いいえ、Bindingクラスはそのような機能を提供しません。実際には必要ありません。バインド フレームワークは、ソース オブジェクトを関連する型に自動的に変換し、バインドされたプロパティ値を使用するか、そのプロパティが見つからない場合はバインド エラーを発生させます。
したがって、Objectタイプのプロパティがある場合ViewModel
public object Dummy
{
get
{
return dummy;
}
set
{
dummy = value;
NotifyPropertyChanged("Dummy");
}
}
そして、私はそれをこのようにバインドしましたTextBox-
<TextBox Text="{Binding Dummy.Name}" HorizontalAlignment="Stretch"/>
後でダミーを次のようなオブジェクトに設定します-
Dummy = new MyCustomType();
Nameこの時点で、バインディングは評価され、ソース オブジェクト内のプロパティを見つけようとします ( Dummy) MyCustomType。名前付きのパブリック プロパティが定義されている場合Name、バインディングが実行されます。それ以外の場合は、バインディング エラーが発生します (例外ではなく、出力ウィンドウにエラー メッセージが表示されます)。
ここで、自分のプロパティを 2 つの異なるタイプ (1 つは を持ち、もう1 つは を持っている) のDummyオブジェクトに設定したい場合は、2 つのオプションがあります。NameFirstName
DataTemplatesBotz300 が提案するように定義する
- a を使用します
ValueConverter(オブジェクト タイプをチェックし、関連するプロパティ値を返します)。
もう 1 つの使用法ValueConverterは、to do 変換を定義し、TypeConverterそれを で宣言すると、TypeConverterAttributeバインディングで自動変換が行われます。
オブジェクトのコレクションにも同じことが当てはまります。
アップデート:
はい、WPF は暗黙的にDefaultTypeコンバーターを使用して、型を関連する表示値に変換します。Objectをプロパティに直接バインドする場合(Text上記の例)、WPF はTypeConverterその型 (利用可能な場合) に を使用するか、ToString()メソッドを使用して表示値を取得します。
ただし、これはすべて、データの表示に使用しているコントロールと、バインドする方法/対象によって異なります。
注: このトリックは、単純なテキスト表現を持つことができるオブジェクトに対してのみ十分です。複雑なデータ オブジェクトを扱う場合、この便利な手法を使用しても意味がない場合があります。
これについて話しているMSDNのこの記事を読むことができます -
データバインディングとWPFでデータ表示をカスタマイズする