我有一个带有ListBox和3个按钮的DocumentListView.Xaml。
在UserControl后面是一个带有3个按钮的DocumentListViewModel,它们的命令属性绑定到3个RelayCommands。
我有3个Controller,如AdministrationController,BillingController,ReportController。
每个控制器都有ObservableCollections,例如客户1:N订单1:N文档与其他控制器相同。
在一个控制器中,我有一个特殊的绑定情况。当我的DocumentListViewModel未被其父ViewModel(如OrderViewModel)初始化时(因为没有加载/存在订单),那么我的UserControl有3个按钮,它们是ENABLED。好的,用户可以按下3个按钮,但没有任何反应,但仍然令人困惑,最重要的是我的用户界面的一致性已经消失。
如何将按钮的命令设置为默认为“已禁用”?
将按钮IsEnabled属性设置为false无效,因为该按钮将永远保持在禁用状态。否CanExecute TRUE会将其设置为IsEnabled = true。
而且我不想引入另一个属性IsButtonEnabled ...那个愚蠢因为那时我的两个世界winforms和wpf在我的按钮逻辑后面...... ICommand应该就够了。
答案 0 :(得分:19)
或者您可以使用按钮样式禁用:
<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>
答案 1 :(得分:5)
这是一个有趣的情况。老实说,我从来没有遇到过加载UI和交互式的情况,但ViewModel尚未绑定。
但是,暂时忽略这一点,您可能会在绑定上使用FallbackValue绑定到全局可用的NullCommand或其CanExecute方法始终返回false的内容。
<Button Command="{Binding SaveCommand, FallbackValue={StaticResource NullCommand}}" />