Первая проблема заключается в том, что установщики IsEndUser и IsAppDeveloper срабатывают также, когда значение изменяется на false.поэтому, если вы нажмете кнопку «Конечный пользователь», это запустит два установщика:
- IsEndUser со значением true
- IsAppDeveloper со значением false
IsAppDeveloperбудет запущен второй, так что в пользовательском интерфейсе все будет в порядке, но в данных для Role будет задано значение «AppDeveloper» (помните, что вы нажали на «EndUser»);
Во-вторых, у вас есть опечатка при уведомлении об изменении свойства вместо:
NotifyPropertyChanged("EndUser");
должно быть
NotifyPropertyChanged("IsEndUser");
такой же опечатки с AppDeveloper
Перед изменением свойства Role необходимо проверить значение true и исправить опечатку, когдаВызов NotifyPropertyChanged:
public bool IsEndUser
{
get => Role == "EndUser";
set
{
if(value)
Role = "EndUser";
NotifyPropertyChanged("IsEndUser");
}
}
public bool IsAppDeveloper
{
get => Role == "AppDeveloper";
set
{
if(value)
Role = "AppDeveloper";
NotifyPropertyChanged("IsAppDeveloper");
}
Ниже приведен дополнительный ответ, который вам может не понадобиться.
Лучшим решением может быть использование enum и enum для логического выраженияконвертер.
Например:
Класс EnumToBooleanConverter:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null || value == null)
return DependencyProperty.UnsetValue;
if (Enum.IsDefined(value.GetType(), value) == false)
return DependencyProperty.UnsetValue;
object parameterValue = Enum.Parse(value.GetType(), parameterString);
return parameterValue.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null)
return DependencyProperty.UnsetValue;
var enumTargetType = targetType;
if (targetType.IsGenericType && targetType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
enumTargetType = targetType.GetGenericArguments().First();
}
return Enum.Parse(enumTargetType, parameterString);
}
}
Перечисление:
public enum Role { EndUser, AppDeveloper }
Изменение в xaml:
<StackPanel Grid.Column="2" Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Top" Margin="0,10,0,0">
<RadioButton IsChecked="{Binding Path=AuthRequstModel.Role, Converter={StaticResource enumBooleanConverter}, ConverterParameter=EndUser}" Content="End User" />
<RadioButton IsChecked="{Binding Path=AuthRequstModel.Role, Converter={StaticResource enumBooleanConverter}, ConverterParameter=AppDeveloper}" Margin="15,0,0,0" Content="App Developer"/>
</StackPanel>
Смена вида модели:
private Role role;
public Role Role
{
get => role;
set
{
role = value;
NotifyPropertyChanged("Role");
}
}