在WPF XAML中使用ENUM作为数组索引。

22 浏览
0 Comments

在WPF XAML中使用ENUM作为数组索引。

我在Parameter.Model命名空间中有一个类型为Parameter的数组参数。我尝试绑定到一个特定的值。如果我按照以下方式操作,就没有任何问题:

...
xmlns:p="clr-namespace:Parameter.Model;assembly=Parameter"
...

现在我想用我的Enum parBez来定义索引:

namespace Parameter.Model
{
    public enum parBez : int
    {
        Val1,
        Val2,
        Val3,
    }
}

我尝试了这个post中关于转换器参数的建议

作为示例,我尝试了以下两行代码来测试在Button中显示Enum:

但是它们都没有生效。

  • 第一个选项编译通过,但是按钮中没有显示任何文本。输出中也没有显示任何消息。
  • 第二个选项无法编译,并显示以下编译器错误:
  • 无效的属性路径语法
  • 'p:parBez'成员无效,因为它没有限定的类型名称。
  • 在目标类型上找不到成员"parBez"

有人可以给我一个提示我做错了什么,或者如何在XAML中使用Enum并将其用作数组的索引的解决方案吗?

我还查看了这个post,但是我认为ValueConverter对我来说不是一个解决方案,因为如果ValueConverter转换了Enum值,就会丢失NotifyEvent。

希望有人之前遇到过这个问题并能给我建议。提前感谢您的每一个提示。

0
0 Comments

使用ENUM在WPF XAML中作为数组索引的原因是希望通过枚举值来访问数组元素,而不是使用整数索引。在XAML中使用枚举值作为数组索引的方法是使用绑定和转换器。

解决方法是使用绑定和转换器来将枚举值转换为整数索引。首先,在XAML中设置绑定的Source为枚举值,然后使用转换器将枚举值转换为整数索引。

下面是使用绑定和转换器的示例代码:

需要注意的是,如果枚举定义在另一个项目中,需要在命名空间声明中添加程序集名称:

xmlns:p="clr-namespace:Parameter.Model;assembly=Parameter"

转换器的作用是将枚举值转换为整数索引。可以自定义一个转换器类Conv_EnumToIndex,实现IValueConverter接口,在转换器的Convert方法中将枚举值转换为整数索引。

public class Conv_EnumToIndex : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // 将枚举值转换为整数索引
        // TODO: 实现转换逻辑
        return index;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在Convert方法中,可以根据枚举值的不同来返回对应的整数索引。需要根据具体的需求来实现转换逻辑。

使用转换器的方式可以实现在XAML中使用枚举值作为数组索引的需求。通过设置绑定的Source为枚举值,并使用转换器将枚举值转换为整数索引,可以在XAML中直接访问数组元素。

0