0

バリデーターを使用して動的に生成されたテキストボックスがいくつかあります。検証エラーが発生した場合は、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>

私が今抱えている問題は、「Onvalidation」イベントが VlidationErrorEventTrigger クラスで呼び出されますが、Viewmodel でコマンドが呼び出されないことです。スタイルではなく直接統合でテストしましたが、このように機能します。

コマンドのバインディングと関係があるのか​​もしれません...

この説明が問題を解決するのに十分であることを願っています。そうでない場合は教えてください:)

4

1 に答える 1

0

バインディングがどのように行われるかはわかりませんが、 ValidationError` があなたのコマンドであるDataContextと仮定します...`Control/Window has your ViewModel Instance and

<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 に答える