WPF XAML传递给ConverterParameter数组的枚举

本文关键字:数组 枚举 ConverterParameter XAML WPF | 更新日期: 2023-09-27 18:11:39

我有一个enum

public enum DocumentTypes
{
    First, Second, Third, Fourth
}

如何将enum的值传递给<sys:Enum></sys:Enum>

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1.Converters"
xmlns:enums="clr-namespace:WpfApplication1.Enums"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
       <Label Content="Test2">
            <Label.Visibility>
                <MultiBinding Converter="{StaticResource Converter}">
                    <MultiBinding.ConverterParameter>
                        <x:Array Type="{x:Type sys:Enum}">
                            <sys:Enum></sys:Enum>
                        </x:Array>
                    </MultiBinding.ConverterParameter>
                    <Binding ElementName="First" Path="IsChecked" />
                    <Binding ElementName="Second" Path="IsChecked" />
                    <Binding ElementName="Third" Path="IsChecked" />
                    <Binding ElementName="Fourth" Path="IsChecked" />
                </MultiBinding>
            </Label.Visibility>
        </Label>

WPF XAML传递给ConverterParameter数组的枚举

这样做:

    <x:Array Type="{x:Type sys:Enum}">
        <local:DocumentTypes>First</local:DocumentTypes>
        <local:DocumentTypes>Second</local:DocumentTypes>
        <local:DocumentTypes>Third</local:DocumentTypes>
    </x:Array>

你可以给你的数据上下文添加一个可绑定的属性,比如:

public IEnumerable DocumentTypesList
{
   get
   {
       return Enum.GetVaues(typeof(DocumentTypes));
   }
}

并通过:

<MultiBinding.ConverterParameter>
                    <Binding Path="DocumentTypesList">
</MultiBinding.ConverterParameter>

这样,如果你的enum被改变了,你不必改变它的任何XAML表示。

或者,如果转换器总是使用此显式enum,则可以在其中直接引用它。

试试这个:

<MultiBinding.ConverterParameter>
  <x:Array Type="{x:Type sys:Enum}">
    <x:Static Member="sys:Enum:YourEnumType.YourEnumValue1" />
    <x:Static Member="sys:Enum:YourEnumType.YourEnumValue2" />
  </x:Array>
</MultiBinding.ConverterParameter>

在我的项目中,我添加了我的枚举类型命名空间,如:

xmlns:mod="clr-namespace:MyProject.Modal;assembly=MyProject.Modal"

MyProject的地方。Modal是枚举定义的名称空间。这样,如果你有一个名为"MyEnum"的枚举,那么你可以这样做:

<MultiBinding.ConverterParameter>
  <x:Array Type="{x:Type mod:MyEnum}">
    <x:Static Member="mod:MyEnum.Value1" />
    <x:Static Member="mod:MyEnum.Value2" />
  </x:Array>
</MultiBinding.ConverterParameter>

参考:https://social.msdn.microsoft.com/forums/vstudio/en - us/9db5f1f5 f3a9 - 402 - c - 9869 - 08年d3624eea59/xarray标记-扩展-为- itemssource combobox?forum=wpf