【发布时间】:2011-10-20 11:32:08
【问题描述】:
所以,我正在使用 M-V-VM 设计模式制作 WPF 应用程序,但在让绑定正常工作时遇到了一些麻烦。
我有一个自定义的 ToggleButton,我希望它的工作方式是这样的:
- 当控件的 IsChecked 属性设置为 true 时,它应该查询第二个布尔值(包含在 ViewModel 中)也为 true。
- 如果是,则将背景颜色设置为一种颜色,如果不是,则将其设置为另一种颜色。
- 如果 IsChecked 为 false,请使用标准颜色。
在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 的包罗万象的样式 - AFAIK,这应该覆盖其中固有的触发器 - 如果我错了,请纠正我)
在控件类中:
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”值(使用断点验证)。如何让它在每次按下控件时检查该值?
【问题讨论】:
标签: c# wpf data-binding mvvm dependency-properties