隐藏工具栏绑定错误
本文关键字:错误 绑定 工具栏 隐藏 | 更新日期: 2023-09-27 17:53:22
我有下一个xaml:
<ToolbarTray Visibility="{Binding SomeProperty}">
<Toolbar>
<Checkbox IsEnabled="{Binding IsEnabled}/"
<... other items />
</Toolbar>
</Toolbar>
和两个类作为可能的数据上下文-用于两个不同的窗口。
class ToolbarContextOne
{
public Visibility SomeProperty {get;set;}
}
class ToolbarContextTwo:ToolbarContextOne
{
public bool IsEnabled {get;set;}
}
当我不需要工具栏时,我会隐藏它。但即使SomeProperty设置为Visibility。崩溃了,当我使用ToolbarContextOne作为数据上下文时,我仍然得到IsEnabled选项的绑定错误。我怀疑发生这种情况是因为解析器就是这样工作的。但也许有一种方法可以避免这个问题,而不改变我的数据上下文类?
避免绑定错误的最简单方法是在绑定中使用FallbackValue
:
<ToolbarTray Visibility="{Binding SomeProperty}">
<Toolbar>
<Checkbox IsEnabled="{Binding IsEnabled, FallbackValue=False}/"
<... other items />
</Toolbar>
</Toolbar>
另一种方法是仅在DataContext具有特定属性时启用绑定:
<CheckBox>
<CheckBox.Resources>
<local:HasPropertyConverter x:Key="HasPropertyConverter"/>
</CheckBox.Resources>
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=.,Converter={StaticResource HasPropertyConverter},
ConverterParameter=IsEnabled}"
Value="True">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
和转换器:
public class HasPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return false;
}
if (parameter == null)
{
return false;
}
PropertyInfo property = value.GetType().GetProperty(parameter.ToString());
return property != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
除了开发人员之外,绑定错误还那么重要吗?
绑定错误只在调试输出窗口中可见,不是吗?
用户最终看不到工具栏。
如果这个错误真的很烦人,你可以:
1为数据上下文提供一个ToolbarContextTwo。
2将isenabled属性添加到ToolbarContextOne
对