通常、EnumToBooleanConverterのようなコンバーターは、再利用可能なコードとして扱われるため、コードビハインドに置くよりも、別のクラスファイルとしてプロジェクト内に定義するのが一般的です。こうすることで、同じコンバーターを複数のウィンドウやユーザーコントロールで再利用しやすくなります。
コンバーターの配置方法
- プロジェクトに「Converters」などのフォルダを作成して、
EnumToBooleanConverter.csという名前でファイルを追加します。 - ファイルにコンバーターのクラス(
EnumToBooleanConverter)を定義します。
// Converters/EnumToBooleanConverter.cs
using System;
using System.Globalization;
using System.Windows.Data;
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? parameter : Binding.DoNothing;
}
}
XAMLでの使用方法
別のファイルに定義したコンバーターをXAMLで使うには、まずそのコンバーターをリソースとして登録します。次に、ラジオボタンでのバインドに利用します。
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace.Converters" <!-- 追加 -->
Title="Radio Button Enum Binding Example"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>
<local:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
</Window.Resources>
<StackPanel>
<RadioButton Content="Option 1"
IsChecked="{Binding SelectedOption, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:Options.Option1}}"
GroupName="Options" />
<RadioButton Content="Option 2"
IsChecked="{Binding SelectedOption, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:Options.Option2}}"
GroupName="Options" />
<RadioButton Content="Option 3"
IsChecked="{Binding SelectedOption, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:Options.Option3}}"
GroupName="Options" />
</StackPanel>
</Window>
まとめ
EnumToBooleanConverterは別ファイルに定義してプロジェクト内で再利用しやすくします。XAML内でリソースとして登録し、必要なバインドで使用します。
この方法で、他のウィンドウやViewModelに対しても同じコンバーターを使い回すことができます。


コメント