2011-04-15 70 views
12

我试图枚举绑定到WPF单选按钮(由this answer启发),但我无法找到该转换器参数的枚举类型:无法找到枚举类型的静态参考WPF

枚举是通过以下方式

namespace Application.Models 
{ 
    public class Enums 
    { 
     public enum MySelections { one, two ,three }; 

     public MySelections CurrentSelection; 

     ... 

    } 
} 

我想现在绑定这样的复选框(数据上下文被假设是正确的,并实现价值转换器:)

<Window x:Class="Application.MainWindow" 
     .... 
     xnlns:models="clr-namespace:Application.Models" > 

... 
<RadioButton Content="One" 
      IsChecked="{Binding Path=CurrentSelection, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static models:Enums.MySelections.one}}" /> 
... 
定义10

问题在于{x:Static models:Enums.MySelections.one},它不断抛出类型models:Enums.MySelections无法找到的错误。

如何找到我的枚举类型?

+0

如果将枚举定义移动到命名空间并从绑定中移除'Enum'类,它是否工作? – Jodrell 2011-04-15 12:30:00

回答

12

你可以宣布它的类之外:

namespace Application.Models 
{ 
    public enum MySelections { one, two, three }; 

    public class Enums 
    { 
     public MySelections CurrentSelection; 

然后此XAML将工作:

.... ConverterParameter={x:Static models:MySelections.one} 

x:Static标记有固定的语法:

{x:静态 efix:typeName.staticMemberName}

+0

只是我在想 – Jodrell 2011-04-15 12:31:26

+0

你打我吧:) – 2011-04-15 12:32:03

+0

就是这样,谢谢。所以为了澄清一下,这个枚举现在在哪里?一个名称空间的静态成员? – 2011-04-15 12:39:29

34

使用“+”而不是“。”。在XAML中获得嵌套类型:

{x:Static models:Enums+MySelections.one} 
+0

真的吗?很酷,这是很好的知道! :) – Bruno 2011-04-15 13:59:55

+0

除了在VS2010中至少会导致设计者无法加载视图,那么你甚至不能看到你想要设计的东西。 – Neutrino 2012-08-16 09:08:03

+0

+1 - 适用于我。但是,它似乎不适用于x:Type。 x:Type不支持这种语法吗? (例如{x:类型模型:Enums + MySelections}) – hashlock 2012-11-13 20:00:19