1

A partial answer exists here: WPF Multiple Enum Flags to Converter Parameter? where the proposed solution does loose the compile time type checking because it uses string values instead of real enum values. That could lead to error at runtime.

Additional information for experienced developers: This is the same problem that exists for many years about the INotifyPropertyChange before nameof exists, or lamda's for an alternate soso alternative.

Actually we can pass one enum parameter as: ConverterParameter={x:Static module:MyEnum.MyEnumValue} and still keeping compile time type checking.

But how to keep compile time type checking for multiples enum with flags values in XAML?

Example of what I would like to do:

<MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=Item.SimulationNatureType}" 
        Value="{x:Static core:SimulationNatureType.TimeDomain | x:Static core:SimulationNatureType.FrequencyScan}">
    </Condition>
...
Eric Ouellet
  • 10,996
  • 11
  • 84
  • 119
  • Does this answer your question? [Setting multiple enum flags in XAML](https://stackoverflow.com/questions/7718928/setting-multiple-enum-flags-in-xaml) – Pavel Anikhouski Nov 27 '19 at 18:10
  • Have you tried to use comma as separator? – Pavel Anikhouski Nov 27 '19 at 18:10
  • @PavelAnikhouski, I saw that answer too. If yuou can explain how it could apply to my problem and/or how to use it in real xaml code, then perhaps... But I doubt (the proposed solution does not contains the namespace and type (how could it applies as a solution) ??? – Eric Ouellet Nov 27 '19 at 18:28

2 Answers2

1

While

<MultiDataTrigger.Conditions>
    <Condition ... Value="TimeDomain,FrequencyScan">
    </Condition>
</MultiDataTrigger.Conditions>

would simply pass a string to the Condition's Value, the following should work:

<MultiDataTrigger.Conditions>
    <Condition ...>
        <Condition.Value>
            <core:SimulationNatureType>TimeDomain,FrequencyScan</core:SimulationNatureType>
        </Condition.Value>
    </Condition>
</MultiDataTrigger.Conditions>
Clemens
  • 123,504
  • 12
  • 155
  • 268
0

Just as additionnal information, this is how the answer served me so well:

(I know my universal converter is bad... sorry... 1=true, 2=false, 4=null)

<Style TargetType="Image" x:Key="ImageStyleForSimulatedInfoSimulationValues">
            <Style.Setters>
                <Setter Property="Source" Value="pack://application:,,,/WpfUtil;component/Images/NotApplicable16x16.png"></Setter>
            </Style.Setters>

            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Value="True">
                            <Condition.Binding>
                                <Binding Path="Item.SimulationNatureType" Converter="{StaticResource EnumWithFlagsHavingSomeSpecificFlagSetToBoolean}">
                                    <Binding.ConverterParameter>
                                        <core:SimulationNatureType>TimeDomain, FrequencyScan</core:SimulationNatureType>
                                    </Binding.ConverterParameter>
                                </Binding>
                            </Condition.Binding>
                        </Condition>
                        <Condition Value="True" Binding="{Binding Path=Item.IsValidForValues, ConverterParameter=1,
                                                Converter={StaticResource NullableBooleanToBooleanUniversalConverter}}">
                        </Condition>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Source" Value="pack://application:,,,/WpfUtil;component/Images/OkSmall16x16.png" />
                </MultiDataTrigger>

                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Value="True">
                            <Condition.Binding>
                                <Binding Path="Item.SimulationNatureType" Converter="{StaticResource EnumWithFlagsHavingSomeSpecificFlagSetToBoolean}">
                                    <Binding.ConverterParameter>
                                        <core:SimulationNatureType>TimeDomain, FrequencyScan</core:SimulationNatureType>
                                    </Binding.ConverterParameter>
                                </Binding>
                            </Condition.Binding>
                        </Condition>
                        <Condition Value="True" Binding="{Binding Path=Item.IsValidForValues, ConverterParameter=6,
                                                Converter={StaticResource NullableBooleanToBooleanUniversalConverter}}">
                        </Condition>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Source" Value="pack://application:,,,/WpfUtil;component/Images/Warning16x16.png" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
Eric Ouellet
  • 10,996
  • 11
  • 84
  • 119