![](/img/trans.png)
[英]How Can I get by simple code the Checked RadioButton From Group of RadioButtons Located in same panel in C#?
[英]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.