【问题标题】:How to specify an enumeration in xaml如何在 xaml 中指定枚举
【发布时间】:2012-11-30 17:04:14
【问题描述】:

我的 WPF 应用程序有一个扩展,我在回答 StackOverflow 上的一个问题时找到了该扩展,它从枚举中为 ComboBox 创建选择。我不记得我是从哪个帖子得到的,但因为这不是问题,所以无关紧要。

我在我的 WPF 应用程序中为我们产品的后端使用了一个 DLL。在这个 DLL 中有一个枚举,我希望用户从使用 ComboBox 和上述扩展名中进行选择。我在 XAML 中定义了正确的 xmlns。

问题是我的枚举是另一个类的子类。也就是说,它是这样定义的:

public class MyClass {

    . . .

    public enum MyEnum { . . . }

    . . .
}

我认为ComboBox 的 XAML 应该如下所示:

<ComboBox ItemsSource="{Binding Source={cs:Enumeration {x:Type ns:MyClass.MyEnum}}}" 
          . . . />

当我键入“MyClass”时,当我键入句点以将父类名称与子类型名称分开时,Intellisense 只是再次提供上层类名称。如果我只是在句号之后键入子类名称,编译器会给我一个错误:“Type MyClass.MyEnum not found”。

如何正确指定我的枚举名称?

【问题讨论】:

    标签: c# wpf xaml combobox enums


    【解决方案1】:

    【讨论】:

    • 这对我不起作用。我正在使用 VS 2010,但我仍然收到“找不到类型 'MyClass+MyEnum'”错误。编译器正在生成错误,所以我也无法运行可执行文件。
    • @TonyVitabile:看起来这在 VS2010 中被破坏了。在这个答案中有一个自定义标记扩展的解决方法:stackoverflow.com/a/1220266/124386
    • 我尝试了这种解决方法,但对我来说也失败了。当我指定 ns:MyClass.MyEnum 类名时,我不断从 VS2010 编译器收到相同的错误。
    • @TonyVitabile:我认为你需要将两者结合起来;使用该答案中的Type2Extensionns:MyClass+MyEnum 语法。
    • 我就是这么做的。我将Type2Extension 添加到窗口的代码隐藏中,然后在XAML 中使用它和ns:MyClass+MyEnum 语法。同样的错误。我之前的评论打错了
    【解决方案2】:

    我决定在此基础上加注,并使用与从数据库中提取选项加载ComboBox 相同的机制。那就是:

    1. 我在我的视图模型类中创建了一个 ObservableCollection 来保存选项
    2. 我用称为ItemChoice 的通用自定义类的对象填充视图模型类的构造函数中的ObservableCollection。声明如下:

      public ObservableCollection> EnumChoices { get;设置;

    3. 我将 ComboBox's ItemsSource 属性绑定到 XAML 中的 EnumChoices 集合。

    4. 在视图模型的构造函数中,我实例化了EnumChocies 集合,并用新的ItemChoice 对象加载它,枚举中的每个选项一个。

    这一切都有效。我现在可以继续处理代码的其他问题。

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多