いいえ、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 つのオプションがあります。Name
FirstName
DataTemplates
Botz300 が提案するように定義する
- a を使用します
ValueConverter
(オブジェクト タイプをチェックし、関連するプロパティ値を返します)。
もう 1 つの使用法ValueConverter
は、to do 変換を定義し、TypeConverter
それを で宣言すると、TypeConverterAttribute
バインディングで自動変換が行われます。
オブジェクトのコレクションにも同じことが当てはまります。
アップデート:
はい、WPF は暗黙的にDefaultType
コンバーターを使用して、型を関連する表示値に変換します。Object
をプロパティに直接バインドする場合(Text
上記の例)、WPF はTypeConverter
その型 (利用可能な場合) に を使用するか、ToString()
メソッドを使用して表示値を取得します。
ただし、これはすべて、データの表示に使用しているコントロールと、バインドする方法/対象によって異なります。
注: このトリックは、単純なテキスト表現を持つことができるオブジェクトに対してのみ十分です。複雑なデータ オブジェクトを扱う場合、この便利な手法を使用しても意味がない場合があります。
これについて話しているMSDNのこの記事を読むことができます -
データバインディングとWPFでデータ表示をカスタマイズする