リストビューにラジオボタングループがあります。このリストビューの行 (とりわけラジオ ボタン grp を含む) は、観察可能なコレクションです。
私が書いたコードは次のようになります。
Xaml:
<RadioButton Content="EnumValueName1"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName1}" >
</RadioButton>
<RadioButton Content="EnumValueName2"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName2}">
</RadioButton>
<RadioButton Content="EnumValueName3"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName3}">
</RadioButton>
これらの値を保持するテーブルを定義するデータ構造で、propertyName というデータ フィールドに直接バインドしようとしています。このビューの ViewModel クラスにこのフィールドがありません。これは、現在入力しているコレクションのインデックスを追跡しないようにするためです。(またはそう思いたい!)
コンバーター:
public class EnumBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null)
return DependencyProperty.UnsetValue;
if (value == null || Enum.IsDefined(value.GetType(), value) == false)
return DependencyProperty.UnsetValue;
object parameterValue = Enum.Parse(value.GetType(), parameterString);
return parameterValue.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null || value.Equals(false))
return DependencyProperty.UnsetValue;
return Enum.Parse(targetType, parameterString);
}
}
問題は、Enum.Parse 行の ConvertBack 関数で、次の Argument 例外が発生することです。
提供される型は Enum でなければなりません。パラメータ名: enumType
バインディングに列挙型を返す方法はありますか? どの列挙値を表すかをラジオボタンに伝えるにはどうすればよいですか? バインディングに適切な列挙値を返す関数を作成するにはどうすればよいですか?
皆さんが助けてくれることを願っています。前もって感謝します!