WPF静态属性绑定不在列表视图上工作

时间:2011-03-22 19:30:35

标签: c# wpf data-binding binding

我目前正在将列表视图绑定到对象列表,并且每个人都在工作。

只要我放入我的Window元素DataContext="{Binding RelativeSource={RelativeSource Self}}"

,我就可以很好地绑定到xaml后面的代码

我的ListView看起来像这样,绑定对我的绑定列正常工作到MyCollection项的属性。

<ListView ItemsSource="{Binding MyCollection}">

对于其中一个专栏,我总是希望它说同样的话。例如,此列将始终包含“Hello World”

以下代码给出了绑定错误:

<GridViewColumn Header="I want all fields to be Hello World" DisplayMemberBinding="{Binding Source={x:Static Member=MyNamespace.MyStaticClass},Path=MyStaticStringField}" />

我收到错误:

  

错误MC3050:找不到类型“MyNamespace”。请注意,类型名称区分大小写。

MyNamespace与窗口本身相同,MyStaticClass是公共

如果我改为尝试:

<GridViewColumn Header="I want all fields to be Hello World" DisplayMemberBinding="{Binding Source={x:Static Member=MyStaticClass},Path=MyStaticStringField}" />

我收到错误:

  

错误MC3029:'MyStaticClass'成员无效,因为它没有合格的类型名称。

奇怪的是,当我这样做时,它可以工作:

<GridViewColumn Header="This works" DisplayMemberBinding="{Binding Source={x:Static Member=SystemFonts.IconFontFamily}, Path=Source}" />

我要绑定的字段的代码:

namespace MyNamespace
{
    public static class MyStaticClass
    {
        public static string MyStaticStringField{ get; set; }

    }
}

4 个答案:

答案 0 :(得分:4)

我认为你必须包含命名空间

xmlns:local="clr-namespace:MyNamespace"

然后像这样使用它:

{x:Static Member=local:MyStaticClass}

答案 1 :(得分:4)

使用x:Static,您需要指定静态字段或属性的路径(而不仅仅是类)。

<GridViewColumn Header="I want all fields to be Hello World" DisplayMemberBinding="{Binding Source={x:Static MyNamespace:MyStaticClass.MyStaticStringField}}" />

另请注意,命名空间与冒号(不是点)的类名分开。

答案 2 :(得分:2)

您不能直接绑定到包含命名空间的类

在Page或Window或Usercontrol声明中设置NameSpace 的xmlns:myNameSpace对象= “pathtoyournamespace”

并在绑定中引用它:{x:Static mynamespace:MyStaticClass},Path ....

答案 3 :(得分:0)

同时添加到其他答案x:static应该绑定到静态类 MEMBER ,而不是类本身。