此問題可能與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