Bhr*_*mar 15 c# wpf groupbox mvvm radio-button
我有一个带有一些radiobuttons的groupbox.我如何知道哪一个被检查?我正在使用WPF并跟随MVVM.
<GroupBox Name="grpbx_pagerange" Header="Print Range">
<Grid >
<RadioButton Name="radbtn_all" Content="All Pages" GroupName="radios_page_range" IsChecked="True" />
<RadioButton x:Name="radbtn_curr" Content="Current Page" GroupName="radios_page_range" />
<RadioButton Name="radbtn_pages" Content="Page Range" GroupName="radios_page_range" />
....
</GroupBox>
Run Code Online (Sandbox Code Playgroud)
现在,我可以想出的一种方法是将每个RadioButton的IsCheckedProperty 绑定到ViewModel中的某个属性,然后在我的ViewModel中执行if..else类型的逻辑以找出所选的radiobutton.
但还有其他优雅的方式吗?
Nit*_*tin 30
您可以将RadioButton.CommandRadiobuttons 绑定到ViewModel的命令,并发送一个唯一的CommandParameter来识别哪个按钮在commandhandler中调用了该命令.
<RadioButton Command="{Binding MyCommand}" CommandParameter="Radio1"/>
<RadioButton Command="{Binding MyCommand}" CommandParameter="Radio2"/>
<RadioButton Command="{Binding MyCommand}" CommandParameter="Radio3"/>
Run Code Online (Sandbox Code Playgroud)
在命令处理程序中检查参数以识别单选按钮.
谢谢
She*_*dan 18
您可以创建一个enum包含的值RadioButton对象作为名称(大致),然后绑定IsChecked属性的这种类型的属性enum使用EnumToBoolConverter.
public enum Options
{
All, Current, Range
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图模型或代码后面:
private Options options = Options.All; // set your default value here
public Options Options
{
get { return options; }
set { options = value; NotifyPropertyChanged("Options"); }
}
Run Code Online (Sandbox Code Playgroud)
添加Converter:
[ValueConversion(typeof(Enum), typeof(bool))]
public class EnumToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null) return false;
string enumValue = value.ToString();
string targetValue = parameter.ToString();
bool outputValue = enumValue.Equals(targetValue, StringComparison.InvariantCultureIgnoreCase);
return outputValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null) return null;
bool useValue = (bool)value;
string targetValue = parameter.ToString();
if (useValue) return Enum.Parse(targetType, targetValue);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在UI中添加绑定,设置适当的ConverterParameter:
<RadioButton Content="All Pages" IsChecked="{Binding Options, Converter={
StaticResource EnumToBoolConverter}, ConverterParameter=All}" />
<RadioButton Content="Current Page" IsChecked="{Binding Options, Converter={
StaticResource EnumToBoolConverter}, ConverterParameter=Current}" />
<RadioButton Content="Page Range" IsChecked="{Binding Options, Converter={
StaticResource EnumToBoolConverter}, ConverterParameter=Range}" />
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过Options查看视图模型中的变量或后面的代码来判断设置了哪个.您还可以RadioButton通过设置Options属性来设置检查.