風格所以,我使用的是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