繁体   English   中英

如果选中了组的单选按钮,如何获取?

[英]How can I get if a radiobutton of a group is checked?

在此处输入图片说明


这是XAML:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel>
            <RadioButton GroupName="a">123</RadioButton>
            <RadioButton GroupName="a">456</RadioButton>
            <RadioButton GroupName="a">789</RadioButton>
        </StackPanel>
        <Button Grid.Row="1" IsEnabled="False">Sumit</Button>
    </Grid>

如您所见,这是一组单选按钮和一个汇总按钮。

我想这样做,如果未选中组中的单选按钮,则禁用汇总按钮,如果选中组中的单选按钮之一,则启用汇总按钮。

我该怎么办?您想帮我吗?谢谢。

最好的方法是使用MVVM。 您创建一个可以绑定到您的UI元素的ViewModel对象。 然后,您可以创建一个特定的属性来通知是否选中了两个按钮:

<StackPanel>
    <RadioButton GroupName="a" IsChecked="{Binding R1}">123</RadioButton>
    <RadioButton GroupName="a" IsChecked="{Binding R2}">456</RadioButton>
    <RadioButton GroupName="a" IsChecked="{Binding R3}">789</RadioButton>
</StackPanel>
<Button Grid.Row="1" IsEnabled="{Binding SubmitEnabled}">Sumit</Button>

您的ViewModel看起来像:

class ViewModel : INotifyPropertyChanged
{
    private bool r1 = false;
    private bool r2 = false;
    private bool r3 = false;

    public event PropertyChangedEventHandler PropertyChanged;

    public bool R1
    {
        get { return r1; }
        set { r1 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SubmitEnabled")); }
    }

    public bool R2
    {
        get { return r2; }
        set { r2 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SubmitEnabled")); }
    }

    public bool R3
    {
        get { return r3; }
        set { r3 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SubmitEnabled")); }
    }

    public bool SubmitEnabled
    {
        get
        {
            return R1 || R2 || R3;
        }
    }
}

您的背后代码如下:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

您需要为每个单选按钮单击时处理一个事件处理程序,例如:

<RadioButton GroupName="a" Click="HandleRadioSelection">123</RadioButton>

并给您的按钮起一个名字:

<Button Name="SubmitForm" Grid.Row="1" IsEnabled="False">Submit</Button>

然后在您的代码后面:

private void HandleRadioSelection(object sender, RoutedEventArgs e) {
    SubmitForm.IsEnabled = true;
}

MVVM是执行基于XAML的应用程序的最佳范例之一。 如果OP不想遵循MVVM方法-触发器应该可以解决问题。

    <StackPanel>
        <RadioButton x:Name="RadioButton1" GroupName="a">123</RadioButton>
        <RadioButton x:Name="RadioButton2" GroupName="a">456</RadioButton>
        <RadioButton x:Name="RadioButton3" GroupName="a">789</RadioButton>
    </StackPanel>

    <Button>
        <Button.Style>
            <Style TargetType="Button">
               <Setter Property="IsEnabled" Value="False"/>
               <Style.Triggers>

                   <DataTrigger Binding="{Binding IsChecked, ElementName=RadioButton1}" Value="True">
                       <Setter Property="IsEnabled" Value="True"/>
                   </DataTrigger>

                    <DataTrigger Binding="{Binding IsChecked, ElementName=RadioButton2}" Value="True">
                        <Setter Property="IsEnabled" Value="True"/>
                    </DataTrigger>

                    <DataTrigger Binding="{Binding IsChecked, ElementName=RadioButton3}" Value="True">
                        <Setter Property="IsEnabled" Value="True"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM