我试图将一个按钮的enabled属性绑定到UWP中另一个按钮的checked属性。
<CommandBar DefaultLabelPosition="Right" VerticalContentAlignment="Center">
<AppBarButton Icon="Add" Label="Add Images" Command="{x:Bind ViewModel.AddImagesCommand}"/>
<AppBarSeparator/>
<AppBarToggleButton x:Name="buttonSelect" Label="Select"/>
<AppBarButton Icon="SelectAll" Label="SelectAll" Click="{x:Bind gridViewInputImages.SelectAll}" IsEnabled="{x:Bind buttonSelect.IsChecked}"/>
</CommandBar>
但是,我收到错误消息:无效的绑定分配:无法将类型'System.Nullable(System.Boolean)'直接绑定到'System.Boolean'。使用强制转换,转换器或函数绑定来更改类型
我想我可以通过绑定到ViewModel中的中间值来解决此问题,但是有没有办法在XAML中做到这一点?
答案 0 :(得分:1)
您不应将可为空的值绑定到bool,因为bool不为空。
IsEnabled值为bool
,IsChecked值为bool?
。您应该编写将bool?
转换为bool的转换。
答案 1 :(得分:1)
像这样在XAML中使用它:
override func viewDidLayoutSubviews() {
var questionView = QuestionView(frame: CGRect(x: 0, y: self.view.frame.height/2, width: self.view.frame.width, height: 400))
self.view.addSubView(questionView)
}
使用这样的转换器:
<CommandBar
DefaultLabelPosition="Right"
VerticalContentAlignment="Center">
<AppBarButton
Icon="Add"
Label="Add Images"
Command="{x:Bind ViewModel.AddImagesCommand}" />
<AppBarSeparator />
<AppBarToggleButton
x:Name="buttonSelect"
Label="Select" />
<AppBarButton
Icon="SelectAll"
Label="SelectAll"
Click="{x:Bind gridViewInputImages.SelectAll}"
IsEnabled="{Binding IsChecked, ElementName=buttonSelect, Converter={StaticResource NullBoolConverter}}" />
</CommandBar>
在页面StaticResources中声明您的转换器:
public class NullBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return false;
return (bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}