Возможно иметь один конвертер равенства для любого типа свойства.Хитрость его использования заключается в передаче параметров определенного типа вместо строкового представления.
преобразователь:
public class EqualityCheckConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Equals(value, parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (Equals(value, true))
return parameter;
return Binding.DoNothing;
}
}
пример с enum
:
// property to bind
public DayOfWeek Day { get; set; }
переплет:
<Window.Resources>
<wpfDemos:EqualityCheckConverter x:Key="EqualCheckedConverter"/>
</Window.Resources>
<Menu>
<MenuItem StaysOpenOnClick="True"
Header="Tuesday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Tuesday}}"/>
<MenuItem StaysOpenOnClick="True"
Header="Wednesday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Wednesday}}"/>
<MenuItem StaysOpenOnClick="True"
Header="Thursday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Thursday}}"/>
</Menu>
пример с int
public int TestNum { get; set; }
<Window.Resources>
<wpfDemos:EqualityCheckConverter x:Key="EqualCheckedConverter"/>
<system:Int32 x:Key="Zero">0</system:Int32>
<system:Int32 x:Key="Ten">10</system:Int32>
</Window.Resources>
<Menu>
<MenuItem StaysOpenOnClick="True"
Header="0"
IsCheckable="True"
IsChecked="{Binding TestNum,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={StaticResource Zero}}"/>
<MenuItem StaysOpenOnClick="True"
Header="10"
IsCheckable="True"
IsChecked="{Binding TestNum,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={StaticResource Ten}}"/>
</Menu>