我在 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 values 的示例,这似乎就是正在发生的事情。我的情况更简单,因为它没有参数 - 同样,这不是在提到的类型上调用 he 方法吗?
- 在这里,我将 datacontext 设置为我的 Viremodel 的一个实例,它“神奇地”知道 hos 从实例转到静态方法。
除了这些问题,我觉得它非常像黑盒魔法,我看到的关于绑定过程的信息很少。
说清楚的最佳方法是什么?
绑定过程可能有一些调试工具可用吗?