【问题标题】:Bind to property in a nested static class绑定到嵌套静态类中的属性
【发布时间】:2012-06-21 06:41:18
【问题描述】:

我有以下结构:

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.Foo'。请注意,类型名称区分大小写。”
  • “找不到类型 'ns:Constants.Foo'。”

我也试过了:

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

这会导致一个错误:

  • “未找到类型 'ns:Constants+Foo'。”

是否可以在静态类中绑定到静态类中的静态属性?如果是,怎么做?

【问题讨论】:

  • 您是否还会在此之前包含命名空间Constants+Foo.Bar ?喜欢[namespace].Constants+Foo.Bar
  • 不,但我认为不需要(resharper 删除了命名空间)。测试 1、2...:添加它没有帮助,同样的错误(“未找到”),但现在包括命名空间。
  • 如果您可以将public static class Constants 更改为namespace Constants,它会起作用。这是一个选择吗?
  • 这需要一些重构,但这是一种选择。

标签: c# .net wpf binding


【解决方案1】:

这对我有用

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

本地是

 xmlns:local="clr-namespace:WpfTestApp1"

【讨论】:

  • 你是对的,但由于某些奇怪的原因,它在 XAML 设计器(VS2010)中不起作用。
  • 是的。哎哟。我实际上并没有运行该项目,因为 XAML 设计视图给出了错误。但它确实有效,你是对的。我想我会坚持使用 Clemens 建议的命名空间解决方案,因为在开发过程中不能接受没有功能的设计器。
  • 只是提示 VS2010 的设计者和 Blend 的工作方式不同;)
  • 它可以工作,但是 XAML 设计器写了一个错误。我讨厌错误,即使它们不会妨碍项目运行:)
猜你喜欢
  • 2014-09-10
  • 2014-01-29
  • 2012-10-15
  • 2013-08-17
  • 1970-01-01
  • 2013-08-25
  • 2015-10-15
  • 2011-04-21
  • 2016-01-06
相关资源
最近更新 更多