gpt4 book ai didi

c# - 隐藏工具栏绑定(bind)错误

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

我有下一个 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;}
}

当我不需要它时,我从示例中隐藏了 toolbartray。但即使 SomeProperty 设置为 Visibility.Collapsed,当我使用 ToolbarContextOne 作为数据上下文时,我仍然会收到 IsEnabled 选项的绑定(bind)错误。我怀疑它会发生,因为它是解析器的工作方式。但是也许有一种方法可以在不更改数据上下文类的情况下避免此问题?

最佳答案

避免绑定(bind)错误的最简单方法是在绑定(bind)中使用FallbackValue:

<ToolbarTray Visibility="{Binding SomeProperty}">
<Toolbar>
<Checkbox IsEnabled="{Binding IsEnabled, FallbackValue=False}/"
<... other items />
</Toolbar>
</Toolbar>

已更新
另一种方法是仅在 DataContext 具有特定属性时启用绑定(bind):

<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();
}
}

关于c# - 隐藏工具栏绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com