风格所以,我使用的是M-V-VM设计模式,有一些麻烦我绑定的正常工作作出WPF应用程序。控制基于一个DependencyProperty
我有一个自定义切换按钮,我希望它的工作方式是这样的:
- 当控制的器isChecked属性设置为true,那么它应该查询第二布尔(其中包含的ViewModel)也是如此。
- 如果是,背景颜色设置为一种颜色,如果没有的话将其设置为不同的颜色。
- 如果是器isChecked假,使用标准颜色。
在XAML中,我有这样的风格:
<Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource CustomisableToggleButton}" x:Key="ValidatedTButton">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsChecked}" Value="True" />
<Condition Binding="{Binding IsValid}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="Turquoise" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsChecked}" Value="True" />
<Condition Binding="{Binding IsValid}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="LightCoral" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<DataTrigger Binding="{Binding IsChecked}" Value="False">
<Setter Property="Background" Value="AliceBlue" />
</DataTrigger>
</Style.Triggers>
</Style>
(CustomisableToggleButton一个陷阱适用于的ToggleButtons所有样式 - 据我所知这应该重写是在所固有的触发器 - 如果纠正我,我“M错)
在控制类别:
public class ValidatedToggleButton : ToggleButton
{
public ValidatedToggleButton()
: base() { }
public static readonly DependencyProperty IsValidProperty = DependencyProperty.Register(
"IsValid", typeof(bool), typeof(ValidatedToggleButton));
public bool IsValid
{
get { return (bool)GetValue(IsValidProperty); }
set { SetValue(IsValidProperty, value); }
}
}
而控制的实际实现是:
<Window
<!--standard window properties-->
xmlns:cc="clr-namespace:MVVM.CustomControls"> // namespace where 'ValidatedToggleButton' resides
<!--other XAML code-->
<cc:ValidatedToggleButton
IsValid="{Binding Boolean1}"
Content="ToggleButton1"
IsChecked="{Binding ToggleButton1Checked}"
Grid.Row="6" Style="{StaticResource ValidatedTButton}" />
</Window>
现在,问题是,它从来没有检查'Boolean1'值,除了一次启动(使用断点验证)。我怎样才能让它在每次按下控件时检查该值?
我没有错过,可惜没有雪茄。无论如何,'IsChecked'似乎工作正常,只是'IsValid'似乎是导致问题。 –
把这个答案应用到'IsValid'产生了一个有趣的结果 - 现在ToggleButton总是显示为无效颜色,而不是有效的颜色......奇怪。 –
@KristianFenn用'IsValid'属性做同样的事情。现在看起来你正在检查'ValidatingToggleButton.DataContext.IsValid'的值,我猜测它不存在。通过设置'RelativeSource'到'Self',你改变它来看看'ValidatingToggleButton.IsValid' – Rachel