0

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 関連のバグですか? どうすればこれを修正できますか?

4

1 に答える 1

1

Caliburn.Microとは関係ありません。これをチェックしてください:RadioButtonsを列挙型にバインドする方法は?

スコットの答えからコンバーターを取ると、それはうまくいくでしょう。

于 2012-10-15T12:56:13.743 に答える