xaml - 一旦选中,如何防止RadioButton被取消选中?

标签 xaml enums radio-button

我有一个这样的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)。

最佳答案

试试这个代码:

<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;
}

关于xaml - 一旦选中,如何防止RadioButton被取消选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057539/

相关文章:

c# - 滚动DataGrid时出现InvalidOperationException : The binding expression already belongs to a BindingGroup

c# - 如何使取消按钮像 "X"按钮一样工作?

radio-button - 如何在 Visual C++ 6.0 中检查单选按钮的值

Android - 如何遍历 ListView ?

javascript - jquery 使用单选按钮和复选框切换数组列表

c# - 无法拉伸(stretch)内部 StackPanel

c# - 如何更改 XAMARIN 中 Picker 占位符的颜色?

java - 什么时候需要 Some<E extends Some<E>> 而不是 Some<E extends Some>?

将枚举变量转换为枚举类型

c++ - 为什么我没有收到枚举比较不匹配的警告?