Я пишу простую программу, используя MVVM Model на WPF. В основном, когда пользователь нажимает на переключатель в группе переключателей, он обновляет свойство в модели просмотра с новым номером учетной записи. Проблема в том, что когда я нажимаю другую кнопку, конвертер вызывается для новой кнопки IsChecked Binding, а затем после этого он запускает конвертер для предыдущей кнопки IsChecked binding (для потери статуса проверки).WPF Radio Button Fires Converter в странном порядке
Это вызывает проблему, так как новая кнопка обновляет значение свойства с правильным номером учетной записи, а затем, когда старая кнопка вызывает конвертер, она возвращается обратно к старому значению. Я взломал его для работы, добавив статическую переменную в класс, и если свойство IsChecked является ложным, просто верните значение в статической переменной. У кого-нибудь есть лучшее решение для короткой передачи звонка конвертера в поле, которое теряет статус проверки. Код ниже:
Преобразователь:
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);
}
}
Любая помощь очень ценится.
Спасибо, что это сработало отлично. –
Какая часть? Я хотел бы отредактировать этот ответ, чтобы отразить подход, который вы на самом деле приняли, и, возможно, взять остальное и занести его в другой ответ ... –