将bool反转为单选按钮,从dataContext转换为userControl

本文关键字:dataContext 转换 userControl 单选按钮 bool | 更新日期: 2023-09-27 18:24:00

如何在xaml中绑定布尔的反转值?

我知道,我知道,有很多问题;a关于这一点,但没有任何关于特定情况的信息:转换器在视图模型中,单选按钮在用户控件中。

如何正确引用主窗口视图模型数据上下文?在其他情况下,我使用了我发布的代码,但在这种情况下我不知道如何使用它

更新代码:

namespace ***.ViewModel
{
    [ValueConversion(typeof(bool), typeof(bool))]
    public class InverseBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            if (targetType != typeof(bool))
                throw new InvalidOperationException("The target must be a boolean");
            return !(bool)value;
        }
        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
        class MainWindowViewModel : MyClass.UtilityClasses.ViewModelBase
    {
        public MainWindowViewModel(){
            SaveCommand = new DelegateCommand(SaveData, CanSave );
            UndoCommand = new DelegateCommand(UndoActions, CanSave);
            [...]
    }
....
}

另一个代码更新:

在我的xaml中,我有一个devexpress GridControl,我在其中列出了来自数据库的observableCollection。当我单击一个元素时,布局组将填充相对数据。

在这个布局组中,我有:

<StackPanel Margin="0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
    <RadioButton Content="{DynamicResource Locale}" Margin="10,0,0,0" x:Name="rd_LOCALE" VerticalAlignment="Center" IsChecked="{Binding Path=REMOTO, Converter={StaticResource InverseBooleanConverter}}" GroupName="Location" Panel.ZIndex="9" TabIndex="10" />
    <RadioButton Content="{DynamicResource Remoto}" Margin="10,0,6,0" x:Name="rd_REMOTO" VerticalAlignment="Center" IsChecked="{Binding REMOTO}" GroupName="Location" Panel.ZIndex="10" TabIndex="11" Tag="PRISMA" />
</StackPanel>

当我从一条记录更改为另一条记录时,转换器会给我错误。。。为什么?它使"if(targetType!=typeof(bool))"行失败。所以我试着改变它,比如:

if (value.getType() != typeof(bool))

但这样一来,代码中就不会出现任何错误,它在单选按钮中输入了错误的值!

将bool反转为单选按钮,从dataContext转换为userControl

您需要确保值转换器在XAML 中被引用

<UserControl.Resources>
    <myproject:InverseBooleanConverter x:Key="InverseBooleanConverter" />
</UserControl.Resources>

其中,我的项目是定义值转换器类的命名空间