RadioButtons组

时间:2017-10-26 05:13:55

标签: wpf xaml

<RadioButton Content="1" GroupName="a" IsChecked="{Binding a, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=1}" />
<RadioButton Content="2" GroupName="a" IsChecked="{Binding a, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=2}" />
<RadioButton Content="3" GroupName="a" IsChecked="{Binding a, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=3}" />
<RadioButton Content="1" GroupName="b" IsChecked="{Binding b, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=1}" />
<RadioButton Content="2" GroupName="b" IsChecked="{Binding b, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=2}" />
<RadioButton Content="3" GroupName="b" IsChecked="{Binding b, Converter={StaticResource ResourceKey=RadioButton}, ConverterParameter=3}" />

我有两组RB,每组有三个RB。每组都有相同的RB值。

2个问题:

  1. 如果我点击RB在其他组中的值,我怎样才能在组中禁用RB?是否可以在没有C#代码的情况下在XAML中开发它?

  2. 如何在XAML中执行默认情况下在每个组中单击RB? Binding使用IsChecked,我不能做IsChecked =“true”。现在我在ViewModel中进行,但我认为它可以在XAML中完成。

  3. 对不起,如果有错误,谢谢。

2 个答案:

答案 0 :(得分:0)

我会回答第一个问题..

你可以在Xaml中做到这一点,它太复杂了,即使有可能它也不可读......

我知道Xaml.cs不是代码的好地方,但这是一个纯ui代码,所以我更喜欢在Xaml.cs中编写它,而不是在ViewModel中编写

关于第二个问题,MVVM方式是在ViewModel中设置它 See this,这不完全是您的问题,但我从那里理解您的答案

答案 1 :(得分:0)

您需要使用Converter来反转布尔值。这意味着C#,因为我认为xaml中没有布尔反转转换器。

[ValueConversion(typeof(bool), typeof(bool))]
public class InvertBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool)) throw new InvalidOperationException("Value must be boolean");
        return !((bool)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

你可以在XAML中使用像这样定义这个转换器,

<Window.Resources>
        <local:InvertBooleanConverter x:Key="rbc"></local:InvertBooleanConverter>
</Window.Resources>

在某些StackPanel或Grid中,您可以将InvertBooleanConverter用于RadioButton

    <RadioButton x:Name="rb1a" Content="1" GroupName="a" IsChecked="True" IsEnabled="{Binding IsChecked, ElementName=rb1b, Converter={StaticResource rbc}}" />
    <RadioButton x:Name="rb2a" Content="2" GroupName="a" IsChecked="False" IsEnabled="{Binding IsChecked, ElementName=rb2b, Converter={StaticResource rbc}}" />
    <RadioButton x:Name="rb3a" Content="3" GroupName="a" IsChecked="False" IsEnabled="{Binding IsChecked, ElementName=rb3b, Converter={StaticResource rbc}}" />
    <RadioButton x:Name="rb1b" Content="1" GroupName="b" IsChecked="False" IsEnabled="{Binding IsChecked, ElementName=rb1a, Converter={StaticResource rbc}}" />
    <RadioButton x:Name="rb2b" Content="2" GroupName="b" IsChecked="True" IsEnabled="{Binding IsChecked, ElementName=rb2a, Converter={StaticResource rbc}}" />
    <RadioButton x:Name="rb3b" Content="3" GroupName="b" IsChecked="False" IsEnabled="{Binding IsChecked, ElementName=rb3a, Converter={StaticResource rbc}}" />