그래서 M-V-VM 디자인 패턴을 사용하고 내 바인딩이 올바르게 작동하는 데 문제가있는 WPF 응용 프로그램을 만들고 있습니다.DependencyProperty를 기반으로 스타일 제어
컨트롤의의 IsChecked 속성이 true로 설정되어- , 다음이 포함 두 번째 부울 (쿼리해야합니다
나는 사용자 정의 ToggleButton을, 나는 그것이 작동 할 방법이 이것이다 ViewModel)도 마찬가지입니다.
- 그렇다면 배경색을 한 색으로 설정하고, 그렇지 않으면 다른 색으로 설정하십시오.
- IsChecked가 false이면 표준 색상을 사용하십시오. XAML에서
,이 스타일을 가지고있다 - AFAIK이 점에서 고유 한 트리거를 오버라이드 (override) -
<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 적용 모든 스타일이 캐치입니다 경우에 저를 정정 I '컨트롤 클래스에서
) 틀렸다 :
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