gpt4 book ai didi

c# - 互斥复选框 - C#、MVVM

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:53 25 4
gpt4 key购买 nike

我正在编写一个有两种可能性的程序:手动设置时间和日期,或使用计算机/系统时间和日期。

所以现在我需要制作两个相互排斥的复选框。选择一个时,必须取消选中另一个。如何在 MVVM 中做到这一点?

<CheckBox Name="UseSystemTime" Margin="7"  Content="Use System Time and Date settings (Time, Date, DST, Timezone)" IsChecked="{Binding UseSystemTime}"/>
<CheckBox Name="ManualTime" Margin="7" Content="Set settings Manually" IsChecked="{Binding SetSettingsManually}"/>

有没有办法在 XAML 中执行此操作?

WPF coding mutually exclusive Checkboxes with Data Binding

谢谢!

最佳答案

在你只有 2 个 checkboxes 的情况下,我会在我的 View 模型中只为 ManualTime 引入一个 bool 属性。

public bool IsManualTimeUsed
{
// get;set with property-changed
}

然后在 UI 中您有两个机会:

机会 1:

 <CheckBox Name="UseSystemTime" Margin="7" Content="Use System Time and Date settings (Time, Date, DST, Timezone)" 
IsChecked="{Binding IsManualTimeUsed, Converter{converterNamespace:InverseBoolConverter}}"/>
<CheckBox Name="ManualTime" Margin="7" Content="Set settings Manually"
IsChecked="{Binding IsManualTimeUsed}"/>

InverseBoolConverter 看起来像:

public class InverseBoolConverter : MarkupExtension, IValueConverter
{
private static InverseBoolConverter converter;

public InverseBoolConverter()
{

}

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
return !((bool) value);
return value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}

public override object ProvideValue(IServiceProvider serviceProvider)
{
return converter ?? (converter = new InverseBoolConverter());
}
}

机会 2

<CheckBox Name="UseSystemTime" Margin="7" Content="Use System Time and Date settings (Time, Date, DST, Timezone)" 
IsChecked="{Binding ElementName=ManualTime, Path=IsChecked, Converter={converterNamespace:InverseBoolConverter}}"/>
<CheckBox Name="ManualTime" Margin="7" Content="Set settings Manually"
IsChecked="{Binding IsManualTimeUsed}"/>

使用与机会 1 相同的转换器

关于c# - 互斥复选框 - C#、MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31450433/

25 4 0