1

MVVMパターンを使用しています。

ビューモデルには、ラジオボタンの列挙型プロパティがあります。このプロパティは、モデルのenumプロパティに接続されています。

public MyEnum MyEnumVar
{
     get { return MyModel.EnumVar; }
     set { MyModel.EnumVar = value; }
}

別のビューに変更してから元のビューに戻すと、ゲッターが呼び出される代わりに、セッターが呼び出され、渡された値がラジオボタンの最初のオプションになります。

基本的に、ビューを切り替えるたびに、モデルのラジオボタンの列挙型がリセットされます。セッターが呼び出されないようにする方法はありますか?

4

2 に答える 2

0

結果のブール値をenumプロパティに格納できるように、コンバーターを使用しています。

コンバーターは恐ろしい解決策であり、今では広く普及しており、バインディングに関するかなりの数の重複する質問に対する受け入れられた答えRadioButtonsです。「適切な」方法はListBoxSelectedItemプロパティを使用することです。その方法では、多数のRadioButtonsプロパティを争うことはできません。

これを行う方法の例は、この回答で見ることができます。ビューを切り替える場合はSelectedItem、ソースをターゲットにバインドする必要がRadioButtonあり、それぞれの値でを選択します。

于 2012-07-27T21:35:48.827 に答える
0

このチュートリアルのソリューションを使用しました:http ://wpftutorial.net/RadioButton.html

次に、UIからセッターが呼び出され、アクティブなラジオボタンの状態がすべて変更されました。私にとっては、ラジオボタンごとに新しいグループ名を設定して、同じグループに属さず、互いに影響を与えないようにするのに役立ちました。

<RadioButton Grid.Row="1" Margin="20,30,0,40" GroupName="{Binding GroupName}" Content="Yes" IsChecked="{Binding RadioButton, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource EnumMatchToBooleanConverter}, ConverterParameter=Yes}" />
<RadioButton Grid.Row="1" Margin="76,30,0,40" GroupName="{Binding GroupName}" Content="No" IsChecked="{Binding RadioButton, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource EnumMatchToBooleanConverter}, ConverterParameter=No}"/>

そしてViewModelで:

public string GroupName
{
    get
    {
        return Guid.NewGuid().ToString();
    }
}
于 2014-02-12T10:17:02.833 に答える