WPF/Caliburn マイクロ関連の質問です。
IsChecked プロパティを ArrowType にバインドしている 4 つのラジオ ボタンがあります。これには、作成した LogicArrowEnum 列挙型があります。
ラジオボタンは、コンバーターを使用して、クリックされたボタンに基づいて、関連する列挙を ArrowType プロパティに適切に割り当てます。
XAML:
<Window.Resources>
<my:EnumToBoolConverter x:Key="EBConverter"/>
</Window.Resources>
...
<RadioButton IsChecked="{Binding ArrowType,
Converter={StaticResource EBConverter},
ConverterParameter={x:Static my:LogicArrowEnum.ARROW}}"
Name="LogicArrow"
Style="{StaticResource {x:Type ToggleButton}}"
Width="50"
<TextBlock Text="Arrow"/>
</RadioButton>
<RadioButton IsChecked="{Binding ArrowType,
Converter={StaticResource EBConverter},
ConverterParameter={x:Static my:LogicArrowEnum.ASSIGN}}"
Name="LogicAssign"
Style="{StaticResource {x:Type ToggleButton}}"
Width="50"
<TextBlock Text="Assign"/>
</RadioButton>
<RadioButton
IsChecked="{Binding ArrowType,
Converter={StaticResource EBConverter},
ConverterParameter={x:Static my:LogicArrowEnum.IF}}"
Name="LogicIf"
Style="{StaticResource {x:Type ToggleButton}}"
Width="50"
<TextBlock Text="If" />
コード:
public class EnumToBoolConverter : IValueConverter
{
public object Convert(object value,
Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (parameter.Equals(value))
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return parameter;
}
}
public enum LogicArrowEnum
{
ARROW = 1,
ASSIGN = 2,
IF = 3,
IF_ELSE = 4
}
public LogicArrowEnum ArrowType
{
get { return arrowType; }
set
{
arrowType = value;
NotifyOfPropertyChange(() => ArrowType);
}
}
コードは素晴らしく機能します。ユーザーがボタンをクリックすると、ArrowType プロパティが適切にバインドされます。
これを逆方向にも機能させたいと思います。たとえば、コードを介して ArrowType プロパティを LogicArrowEnum.ASSIGN に設定すると、UI は [割り当て] ボタンが切り替えられたことを示す必要があります。何らかの理由で、これは期待どおりに機能しません。プロパティの set メソッド内では、ArrowType プロパティを任意の列挙に割り当てるたびに、最初に arrowType のプライベート フィールドが必要な値として割り当てられますが、コードが NotifyOfPropertyChange メソッドに到達するとすぐに、それが入力されます。 set メソッドをもう一度実行しますが、その後、arrowType プライベート フィールドを以前に切り替えたボタンにリセットします。
これは Caliburn Micro 関連のバグですか、それとも WPF 関連のバグですか? どうすればこれを修正できますか?