因此,我正在使用M-V-VM设计模式制作WPF应用程序,并且在使我的Bindings正常工作时遇到一些麻烦。
我有一个自定义的ToggleButton,我希望它的工作方式是:
在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'值(使用断点验证)。如何在每次按下控件时检查该值?
答案 0 :(得分:2)
<Condition Binding="{Binding IsChecked}" Value="True" />
这是在您的视图模型(您的数据上下文)上查找名为IsChecked
的属性。你确定你不想要这个:
<Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="True" />
答案 1 :(得分:1)
除了修复XAML绑定的Kent's Answer之外,请确认PropertyChanged
更改后Boolean1
事件被引发。
您可以通过在get
方法中插入断点来完成此操作。