WPF 静态属性绑定不适用于列表视图

wpf*_*pls 5 c# data-binding wpf binding

我目前正在将一个列表视图绑定到一个对象列表,并且一切正常。

只要我放入我的 Window 元素,我就可以很好地绑定到 xaml 后面的代码 DataContext="{Binding RelativeSource={RelativeSource Self}}"

我的 ListView 看起来像这样,并且我的绑定列与 MyCollection 项目的属性的绑定正常工作。

<ListView ItemsSource="{Binding MyCollection}">
Run Code Online (Sandbox Code Playgroud)

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

以下代码给了我一个绑定错误:

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

我收到错误:

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

MyNamespace 与窗口本身具有相同的命名空间,并且 MyStaticClass 是公共的

如果我尝试:

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

我收到错误:

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

奇怪的是,当我这样做时,它起作用了:

<GridViewColumn Header="This works" DisplayMemberBinding="{Binding Source={x:Static Member=SystemFonts.IconFontFamily}, Path=Source}" />
Run Code Online (Sandbox Code Playgroud)

我试图绑定到的字段的代码:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*kov 6

有了x:Static你需要指定一个静态字段或属性(不只是类)的路径。

<GridViewColumn Header="I want all fields to be Hello World" DisplayMemberBinding="{Binding Source={x:Static MyNamespace:MyStaticClass.MyStaticStringField}}" />
Run Code Online (Sandbox Code Playgroud)

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