马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在WPF中使用MVVM模式绑定RadioButton时,假如绑定一个bool范例的值,大概会遇到值丢失的标题。这通常是由于RadioButton的IsChecked属性与bool范例绑定存在直接转换的困难,尤其是在绑定到多个RadioButton时,RadioButton之间的关系也会导致值更新不同等。
为了在MVVM中正确地使用RadioButton绑定一个bool范例的值,我们可以使用Converter来转换RadioButton的IsChecked状态与bool属性之间的值。
办理方案
- 使用Converter举行转换: 我们可以创建一个IValueConverter来处理处罚bool值和RadioButton的IsChecked属性之间的转换。
- 绑定到一个罗列值或一个string属性: 假如你的业务逻辑允许,你可以使用一个enum大概string范例来表现RadioButton的选中状态。每个RadioButton绑定到差异的enum值或string,当选中时更新属性值。
方法1: 使用Converter
起首,创建一个BooleanToIsCheckedConverter类:- using System;
- using System.Globalization;
- using System.Windows.Data;
- public class BooleanToIsCheckedConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is bool boolValue && parameter is string radioButtonValue)
- {
- return boolValue.ToString() == radioButtonValue;
- }
- return false;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is bool isChecked && isChecked && parameter is string radioButtonValue)
- {
- return bool.Parse(radioButtonValue);
- }
- return false;
- }
- }
复制代码 在XAML中引用Converter:- <Window.Resources>
- <local:BooleanToIsCheckedConverter x:Key="BooleanToIsCheckedConverter" />
- </Window.Resources>
复制代码 然后在RadioButton上应用绑定:- <StackPanel>
- <RadioButton Content="Option 1"
- IsChecked="{Binding Path=IsOptionSelected, Converter={StaticResource BooleanToIsCheckedConverter}, ConverterParameter=True}" />
- <RadioButton Content="Option 2"
- IsChecked="{Binding Path=IsOptionSelected, Converter={StaticResource BooleanToIsCheckedConverter}, ConverterParameter=False}" />
- </StackPanel>
复制代码 此中,IsOptionSelected是你的ViewModel中的bool属性。
方法2: 使用罗列范例绑定
假设你有一个罗列范例表现选项:- public enum SelectedOption
- {
- Option1,
- Option2
- }
复制代码 在ViewModel中创建一个SelectedOption属性:- private SelectedOption _selectedOption;
- public SelectedOption SelectedOption
- {
- get { return _selectedOption; }
- set
- {
- _selectedOption = value;
- OnPropertyChanged(nameof(SelectedOption));
- }
- }
复制代码 在XAML中绑定到这个属性:- <StackPanel>
- <RadioButton Content="Option 1"
- IsChecked="{Binding Path=SelectedOption, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Option1}" />
- <RadioButton Content="Option 2"
- IsChecked="{Binding Path=SelectedOption, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Option2}" />
- </StackPanel>
复制代码 同时,界说EnumToBooleanConverter以处理处罚罗列范例到bool的转换。
通过这种方式,你可以在WPF中正确使用MVVM模式绑定RadioButton的IsChecked属性而不丢失值。
|