绑定到嵌套静态类中的属性

11

我有以下结构:

public static class Constants {
  public static class Foo {
    public static string Bar {
      get {
        //Constants.Foo.Bar == "FooBar"
        return "FooBar";
      }
    }
  }
}

我想将这个绑定到用户控件中的一个按钮上。

<Button Content="{Binding Source={x:Static ns:Constants.Foo.Bar}}" />

(其中ns指向定义“Constants”的程序集和命名空间)。
这会导致两个错误:

  • "找不到类型'Constants.Foo'。请注意,类型名称区分大小写。"
  • "未找到类型'ns:Constants.Foo'。"

我还尝试了:

<Button Content="{Binding Source={x:Static ns:Constants+Foo.Bar}}" />

以下代码导致了一个错误:

  • "Type 'ns:Constants+Foo' was not found."

在静态类中,可以绑定到另一个静态类的静态属性吗?如果可以,如何实现?


你是否在这里 Constants+Foo.Bar 前面也包含了命名空间,例如 [namespace].Constants+Foo.Bar - V4Vendetta
不需要,但我认为这并不必要(resharper会删除命名空间)。测试1、2……:添加它没有帮助,仍然是同样的错误(“未找到”),但现在包括命名空间。 - Jan Willem B
1
如果你能将 public static class Constants 改为 namespace Constants,那么它就可以工作。这是一个选项吗? - Clemens
需要进行一些重构,但这是一个选项。 - Jan Willem B
1个回答

18

这对我有效

 <Button Content="{Binding Source={x:Static local:Constants+Foo.Bar}}" />

本地是

 xmlns:local="clr-namespace:WpfTestApp1"

你说得对,但出于某种奇怪的原因,在XAML设计器(VS2010)中它不起作用。 - Clemens
是的。哎呀。我实际上没有运行这个项目,因为XAML设计视图会出错。但它确实可以工作,你是对的。我想我会坚持Clemens建议的命名空间解决方案,因为在开发过程中不能接受无法正常工作的设计师。 - Jan Willem B
只是一个提示,VS2010和Blend的设计师工作方式不同 ;) - blindmeis
它能工作,但XAML设计师会写一个错误。我讨厌错误,即使它们不妨碍项目运行 :) - monstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接