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