WPF:DataTemplate-Style只有在命令可以执行时才会应用

时间:2016-04-12 15:44:11

标签: c# wpf mvvm

我的MVVM-Adventures中的另一个奇怪的行为我无法解释并且没有找到推理: 我的VM中有一个命令,可以在选择颜色时执行:

    public ICommand SetSingleColor
    {
        get
        {
            return new RelayCommand(f =>
            {
                var visualLed = f as VisualLed;
                visualLed.Color = SelectedColor.Value;
            }, () => SelectedColor.HasValue);
        }
    }

我的DataTemplate看起来像这样:

<DataTemplate DataType="{x:Type ml:VisualLed}" x:Key="DtVisualLed">
    <Button 
        Background="DarkCyan"
        Command="{Binding Path=DataContext.SetSingleColor, RelativeSource={RelativeSource AncestorType=v:LedDesignView}}" 
        CommandParameter="{Binding}"
        Style="{StaticResource StyleBtnLed}">
    </Button>
</DataTemplate>

正如你所看到的,我将VisualLed本身传回VM,因此我可以设置Color。我刚刚添加了Background-Property用于测试目的。 我真正没有得到的:如果可以执行命令,则仅应用样式和背景!因此,如果我加载View,Button-Background就是Default-Gray,一旦我选择了Color,它就会变成DarkCyan。

不幸的是,我无法提供更多信息,但我没有在主题上找到任何内容,ButtonBase.Command如何影响其他属性。它似乎也是一种预期的行为,因为我没有得到任何Binding-Errors等。

1 个答案:

答案 0 :(得分:1)

Button.Command和Button.IsEnabled属性之间存在关联。如果Command.CanExecute返回false,则按钮将被禁用。现在,如果控件开发人员没有为此计划,您通常无法使用自己的风格控制所有内容。在这种情况下,禁用按钮背景由Button的开发人员修复,您无法使用自己的样式覆盖它(除非您更改按钮的模板)。