我有一些带有Validators的动态生成文本框。如果发生验证错误,我希望他们向VM发送命令。此行为放在样式中,因此我不需要将其写入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中没有调用Command。 我已经通过直接集成测试了它,而不是样式,它以这种方式工作。
所以也许这与命令的绑定有关...
我希望这个描述足以解决问题。如果没有,请告诉我:)
答案 0 :(得分:0)
我不确定你是如何完成绑定的,但假设DataContext
你`Control/Window has your ViewModel Instance and
ValidationError`是你的命令......
<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>
这假设您的触发器无法找到所需的命令。