WPF で MVVM モデルを使用して簡単なプログラムを作成しています。基本的に、ユーザーがラジオ ボタンのグループのラジオ ボタンをクリックすると、ビュー モデルのプロパティが新しいアカウント番号で更新されます。問題は、別のボタンをクリックすると、新しいボタン IsChecked Binding に対してコンバーターが呼び出され、その後、前のボタン IsChecked バインディングに対してコンバーターが実行されることです (チェックされた状態を失うため)。
新しいボタンが正しいアカウント番号でプロパティの値を更新し、古いボタンがコンバーターを呼び出すと、古い値に変換されるため、これが問題を引き起こしています。クラスに静的変数を追加することで機能するようにハッキングしました。IsChecked プロパティが false の場合は、静的変数の値を返すだけです。チェックされたステータスを失うボックスでコンバーター呼び出しを回避するためのより良い解決策はありますか。コードは以下のとおりです。
コンバータ:
class RadioToAccountConverter : IValueConverter
{
static string myValue; //HACK TO MAKE IT WORK
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return parameter.ToString();
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value)
{
myValue = parameter.ToString(); // Hack to make it work
return parameter.ToString();
}
return myValue; // Hack to make it work
}
}
XAML:
<RadioButton Foreground="HotPink"
Grid.Column="0"
Content="6087721"
Tag="6087721"
IsChecked="{Binding Account, Converter={StaticResource Radio2Value}, Mode=OneWayToSource, ConverterParameter=6087721}">
</RadioButton>
<RadioButton Foreground="HotPink"
Grid.Column="1"
Content="BFSC120"
IsChecked="{Binding Account, Converter={StaticResource Radio2Value}, Mode=OneWayToSource, ConverterParameter='BFSC120'}">
</RadioButton>
<RadioButton Foreground="HotPink"
Grid.Column="2"
Content="BFSC121"
IsChecked="{Binding Account, Converter={StaticResource Radio2Value}, Mode=OneWayToSource, ConverterParameter=BFSC121}">
</RadioButton>
<RadioButton Foreground="HotPink"
Grid.Column="3"
Content="BFSC206"
IsChecked="{Binding Account, Converter={StaticResource Radio2Value}, Mode=OneWayToSource, ConverterParameter=BFSC206}">
</RadioButton>
財産:
public const string AccountPropertyName = "Account";
private string _account;
/// <summary>
/// Sets and gets the Account property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public string Account
{
get
{
return _account;
}
set
{
if (_account == value)
{
return;
}
RaisePropertyChanging(AccountPropertyName);
_account = value;
RaisePropertyChanged(AccountPropertyName);
}
}
どんな助けでも大歓迎です。