2013-03-28 62 views
0

當程序更改值時觸發驗證?當程序更改值時觸發驗證?

我有一個數據網格,它有一個'狀態'列。當用戶點擊一個按鈕時,它會啓動一個後臺工作人員,根據datagrid行中的數據進行長時間處理:循環爲行,這是一個ObservableCollection。對於一行,它將報告處理狀態並將其顯示在「狀態」列中(作爲字符串)。有時候,「狀態」將包括文字,如:

錯誤:.... 警告:...

我想改變基於狀態文本狀態單元格背景,即紅色爲錯誤,灰色的警告...

我可以通過驗證來做到這一點嗎?我編碼如下。如果我手動更改狀態文本,它就像我想要的那樣工作。 local:StatusValidationRule檢查它是否有錯誤。但是,這是行不通的,因爲狀態文本被程序改變了,這不會觸發驗證。

有什麼建議嗎?謝謝。

<DataGridTextColumn Header="Status" Width="200" CanUserResize="True"> 

    <DataGridTextColumn.Binding> 
     <Binding Path="Status" ValidatesOnExceptions="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <local:StatusValidationRule ValidationStep="UpdatedValue"/> 
      </Binding.ValidationRules> 
     </Binding> 
    </DataGridTextColumn.Binding> 

    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
      <Setter Property="TextWrapping" Value="Wrap"> 
      </Setter> 

      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="true"> 
        <Setter Property="Background" 
Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 

</DataGridTextColumn> 
+1

您是否嘗試過您的驗證設置爲'<地方:StatusValidationRule ValidatesOnTargetUpdated =「真」',這一點應引起它來驗證隨時目標屬性更新 –

+0

感謝,那回答的問題。你可以回答它作爲答案,所以我可以接受它嗎?再次感謝。 – urlreader

回答

1

你可以設置你的ValidationRuleValidatesOnTargetUpdated這將導致它來驗證隨時目標屬性被更新。

例子:

<local:StatusValidationRule ValidatesOnTargetUpdated="True" /> 
相關問題