此问题可能与Creating an instance of a nested class in XAML重复。此问题和相关的MSDN文档涉及嵌套类型。在这个例子中,类型本身并不是嵌套的,但是语法似乎很熟悉。我是否不知道是否有理由提出单独的问题和答案。引用XAML中的嵌套属性
我想使用ObjectDataProvider
访问嵌套属性。我可以访问类型的静态属性,但通过类型上的静态属性访问实例属性会导致编译错误。
例如,采取以下三个类。
public static class A
{
static A()
{
BProperty = new B();
}
public static B BProperty { get; private set; }
}
public class B
{
public B()
{
CProperty = new C();
}
public C CProperty { get; private set; }
public string GetValue(string arg)
{
return arg + " from B";
}
}
public class C
{
public string GetValue(string arg)
{
return arg + " from C";
}
}
创造BProperty
的ObjectDataProvider
上A
可以使用以下XAML来完成。
<Window.Resources>
<ObjectDataProvider x:Key="provider"
ObjectInstance="{x:Static Member=local:A.BProperty}"
MethodName="GetValue">
<ObjectDataProvider.MethodParameters>
<System:String>string argument</System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<Label Content="{Binding Source={StaticResource provider}}" />
</Grid>
运行此代码会生成一个带有文本“B的字符串参数”的标签。
如果我将provider
的ObjectInstance
设置为"{x:Static Member=local:A.BProperty.CProperty}"
或"{x:Static Member=local:A.BProperty+CProperty}"
我收到编译错误。
我如何从ObjectDataProvider
访问的BProperty
实例?
您的课程和属性名称相同。为了测试,你可以重命名你的类,看看它是否仍然存在? – Xcalibur37 2012-07-19 22:00:44
这个例子是从我原来的代码简化的,它的属性名称与它们的返回类型不同。在这种情况下,问题仍然存在。但是,这可能会提高此示例的可读性,因此我将更新代码。 – bozalina 2012-07-19 22:07:25
我会说这是因为B被实例化为静态。因此,一旦它被实例化,它的上下文属性就被忽略了。 – Xcalibur37 2012-07-19 22:23:41