0

我有一些带有验证器的动态生成的文本框。如果发生验证错误,我希望他们向 VM 发送命令。这个Behavior是放在一个style里面的,所以我不用写到xaml生成中。

这是代码:

<behaviors:Triggers x:Key="validationTrigger" x:Shared="False">
    <behaviors:ValidationErrorEventTrigger>
        <cmd:EventToCommand Command="{Binding ValidationError,NotifyOnValidationError=True}"
                            PassEventArgsToCommand="True" />
    </behaviors:ValidationErrorEventTrigger>
</behaviors:Triggers>

<Style x:Key="EditableTextBox" TargetType="{x:Type TextBox}">
    <Setter Property="Background" Value="#DDFFDD" />
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <Border BorderBrush="Red" BorderThickness="2">
                    <AdornedElementPlaceholder />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="behaviors:OCCInteraction.Triggers" Value="{StaticResource ResourceKey=validationTrigger}" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Background" Value="#FFDDDD"/>
        </Trigger>
    </Style.Triggers>
</Style>

我现在遇到的问题是在 VlidationErrorEventTrigger 类中调用了“Onvalidation”事件,但在 Viewmodel 中没有调用命令。我已经通过直接集成而不是样式对其进行了测试,并且它以这种方式工作。

所以也许它与命令的绑定有关......

我希望这个描述足以解决问题。如果没有请告诉我:)

4

1 回答 1

0

我不确定你的绑定是如何完成的,但假设DataContext`Control/Window has your ViewModel Instance andValidationError` 是你的命令......

<behaviors:Triggers x:Key="validationTrigger" x:Shared="False">
 <behaviors:ValidationErrorEventTrigger>
     <cmd:EventToCommand Command="{Binding Path=DataContext.ValidationError,RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}",NotifyOnValidationError=True}"                     
    PassEventArgsToCommand="True" />
 </behaviors:ValidationErrorEventTrigger>
</behaviors:Triggers>

这是假设您的触发器无法找到所需的命令。

于 2012-05-16T07:22:12.210 回答