检查后如何防止RadioButton取消选中?

问题描述 投票:2回答:1

我有这样的enum

public enum DLTypeEnum
{
    Others = 1, People = 2, Company = 4,
}

我在我的ViewModel有一个属性,如下所示:

private DLTypeEnum _DLType;
public DLTypeEnum DLType
{
    get { return _DLType; }
    set { SetProperty(ref _DLType, value); }
}

这是我的xaml

<WrapPanel  Grid.Row="3" Grid.Column="1">
    <WrapPanel.Resources>
        <Converter:EnumToBoolConverter x:Key="EnumToBooleanConverter" />
    </WrapPanel.Resources>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.Others}}"/>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.People}}"/>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.Company}}"/>
 </WrapPanel>

而这个转换器:

 public class EnumToBoolConverter:IValueConverter
    {
        private int val;
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int intParam = (int)parameter;
            val = (int)value;

            return ((intParam & val) != 0);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)//bool to enum
        {
            val ^= (int)parameter;
            return Enum.Parse(targetType, val.ToString());
        }
    }

一旦RadioButton被检查,我不希望它被取消选中,除非它选择其他RadioButton(即必须一直选择一个RadioButton)。

xaml enums radio-button
1个回答
7
投票

试试这段代码:

<WrapPanel  Grid.Row="3" Grid.Column="1">
    <WrapPanel.Resources>
        <Converter:EnumToBoolConverter x:Key="EnumToBooleanConverter" />
    </WrapPanel.Resources>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.Others}}" Unchecked="RadioButton_Unchecked"/>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.People}}" Unchecked="RadioButton_Unchecked"/>
    <RadioButton GroupName="DLType" IsChecked="{Binding Path=DLType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static dlAccount:DLTypeEnum.Company}}" Unchecked="RadioButton_Unchecked"/>
 </WrapPanel>

和代码背后:

private void RadioButton_Unchecked(object sender, RoutedEventArgs e)
{
    if((_viewModel.DLss.CurrentItem as DL).DLType == 0)
      ((RadioButton)sender).IsChecked = true;
}
© www.soinside.com 2019 - 2024. All rights reserved.