9

我有一个带有 ListBox 和 3 个按钮的 DocumentListView.Xaml。

在 UserControl 后面是一个 DocumentListViewModel,它有 3 个按钮,它们的命令属性绑定到 3 个 RelayCommands。

我有 3 个控制器,例如 AdministrationController、BillingController、ReportController。

每个控制器都有 ObservableCollections,例如 Customer 1 : N Order 1: N Document 与另一个控制器相同。

在一个控制器中,我有一种特殊的绑定情况。当我的 DocumentListViewModel 未由其父 ViewModel(如 OrderViewModel)初始化时(因为没有加载/存在订单),那么我的 UserControl 有 3 个启用的按钮。好的,用户可以按下 3 个按钮,但没有任何反应,但仍然非常混乱,最重要的是我的用户界面中的一致性已经消失。

如何将按钮的命令默认设置为“已禁用”?

将 Buttons IsEnabled 属性设置为 false 无济于事,因为按钮将永远处于禁用状态。没有 CanExecute TRUE 会将其设置为 IsEnabled = true。

并且我不想引入另一个属性 IsButtonEnabled ......那很愚蠢,因为那时我的按钮逻辑背后有两个世界的 winforms 和 wpf ...... ICommand 应该足够了。

4

2 回答 2

20

或者您可以使用按钮的样式来禁用:

<Style TargetType="{x:Type Button}" x:Key="DisablerButton">
    <Style.Triggers>
        <Trigger Property="Command" Value="{x:Null}">
            <Setter Property="IsEnabled" Value="False" />
        </Trigger>
    </Style.Triggers>
</Style>
于 2010-12-12T21:48:09.517 回答
5

这是一个有趣的情况。老实说,我从来没有遇到过 UI 已加载和交互但 ViewModel 尚未绑定的情况。

但是,暂时忽略这一点,您可能会在绑定上使用 FallbackValue 来绑定到全局可用的 NullCommand 或始终为其 CanExecute 方法返回 false 的东西。

<Button Command="{Binding SaveCommand, FallbackValue={StaticResource NullCommand}}" />
于 2010-12-12T20:16:26.967 回答