ViewModel クラスで、という名前の静的プロパティを定義しました
static member GetColumnTypes = FSharpType.GetUnionCases typeof<ColumnType>
ここで、ColumnType は通常のユニオン型です
type ColumnType = T_Link of TableName | T_Real | T_Bool | T_Int | T_String
次のシナリオでそのようなコレクションにバインドする XAML でのロジックがわかりません。
<UserControl.Resources>
<ObjectDataProvider x:Key="typelist" MethodName="GetColumnTypes" ObjectType="{x:Type local:MarkupViewModel}"/>
<local:MarkupViewModel x:Key="defaultVM" d:IsDataSource="True"/>
</UserControl.Resources>
//1-WORKS
<ComboBox ItemsSource="{Binding Source={StaticResource defaultVM}, Path=GetColumnTypes}"></ComboBox>
//2-DOES NOT WORK
<ComboBox ItemsSource="{Binding Source={StaticResource typelist}}"></ComboBox>
//3-DOES NOT WORK
<ComboBox ItemsSource="{Binding Source={x:Type local:MarkupViewModel}, Path=GetColumnTypes}"></ComboBox>
//4-WORKS
<ComboBox ItemsSource="{Binding Path=GetColumnTypes}" />
- なぜこれが機能するのですか?名前付きの静的リソース
defaultVM
は、パラメーターなしのコンストラクターを使用してオブジェクトを作成していました。このオブジェクトには、GetColumnTypes メソッドはありません。 - なぜ機能しないのですか?
GetColumnTypes
指定されたタイプを呼び出していると思いました。Enum値を取得する例を見ると、それが起こっているようです。私の場合は、パラメーターがないため、より単純です - 繰り返しますが、これは言及された型のメソッドを呼び出しませんか?
- ここで、datacontext を Viremodel のインスタンスに設定すると、インスタンスから静的メソッドに移動するホストが「魔法のように」認識されます。
これらの質問に加えて、それは非常にブラックボックスの魔法のように感じ、バインディングプロセスに関する情報はほとんどありません.
それを明確にするための最良のアプローチは何ですか?
Binding プロセスで使用できるデバッグ ツールはありますか?