如何在我的xaml中绑定bool的反转值?
我知道,我知道,这里有很多问题,但是对于特定情况没有任何意义:当转换器在视图模型中并且用户控件中的单选按钮时。
如何正确引用主窗口视图模型数据上下文?在其他情况下,我使用了我发布的代码,但在这种情况下,我不知道如何使用它。
更新代码:
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,我从db列出我的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>
当我从一个记录转换到另一个记录时,转换器给我错误...为什么?它失败了&#34; if(targetType!= typeof(bool))&#34;行。所以我试着改变它:
if (value.getType() != typeof(bool))
但是通过这种方式,代码中没有任何失败,它在radiobutton中放错了值!
答案 0 :(得分:1)
您需要确保在XAML中引用了值转换器
<UserControl.Resources>
<myproject:InverseBooleanConverter x:Key="InverseBooleanConverter" />
</UserControl.Resources>
其中我的项目是定义值转换器类的命名空间