IsEnabled False如果Binding.Source不可用

时间:2011-08-21 19:46:44

标签: wpf xaml data-binding isenabled

如果绑定值为false或null,则要禁用我想要禁用的按钮。这是我试过的。

<Button Content="Open" IsEnabled="{Binding SearchItem.WFBatchFolderStatus.UserCanOpen, Mode=OneWay, TargetNullValue=false, Converter={StaticResource booleanPassThru}}" />  

我有一个案例,其中SearchItem.WFBatchFolderStatus可以为null(并且出于有效的商业原因)。如果SearchItem.WFBatchFolderStatus为null,那么我想要禁用该按钮。当SearchItem.WFBatchFolderStatus为null时,转换器不会触发。如果SearchItem.WFBatchFolderStatus不为null,则转换器将触发。如果值为null,则转换器仅返回false,否则返回值。但转换器永远不会看到空值。当SearchItem.WFBatchFolderStatus为null时,按钮IS启用(不是我想要的)。如果我删除了TargetValue和/或Converter,那么当SearchItem.WFBatchFolderStatus为null时,按钮仍然处于启用状态。

2 个答案:

答案 0 :(得分:7)

如果路径的一部分为空,则绑定失败,将Binding.FallbackValue设置为false,如果WFBatchFolderStatus为空,则应禁用它。

答案 1 :(得分:4)

如何使用样式呢?

<Page.Resources>
    <Style x:Key="SomeStyle" TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding SearchItem.WFBatchFolderStatus.UserCanOpen}" Value="{x:Null}">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Page.Resources>
<Grid>
    <Button Content="Open" Style="{StaticResource SomeStyle}" />
</Grid>