2012-05-16 105 views
0

我有一些動態生成的帶有驗證器的文本框。如果發生驗證錯誤,我希望他們向VM發送命令。這個行爲被放置在一個樣式中,所以我不需要把它寫入到xaml代。WPF風格驗證觸發命令

下面的代碼:

<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類,但該命令沒有在視圖模型調用。 我已經用直接整合測試它,而不是用樣式,它以這種方式工作。

因此,也許它是與命令的綁定左右...

我希望這說明,就足以解決問題。如果不是,請告訴我:)

回答

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> 

這是假設你的觸發器是不是能夠找到所需的命令。

+0

嘿,謝謝你的回答! 我也認爲觸發器找不到命令,但即使使用relativsource usercontrol它不能找到它:( –

+0

@inxs嘗試發佈一些更多的xaml .. – Ankesh