在我的WPF應用程序(.Net 4.5)中,我想向UI提供有關驗證結果的擴展視覺反饋。數據層的驗證引擎通過INotifyDataErrorInfo接口返回警告和錯誤。
根據錯誤類型和錯誤消息列表,我有以下XAML顯示紅色或橙色邊框。這裏errorToColor
是值轉換器的資源鍵,如果Validation.Errors
集合中存在至少一個錯誤,並且只有警告存在橙色刷,則返回紅色刷。在Validation.Errors綁定中使用轉換器
<TextBox Name="MappingName" Text="{Binding Path=Mapping.Name, NotifyOnValidationError=True}" >
<Validation.ErrorTemplate>
<ControlTemplate>
<DockPanel>
<Border BorderBrush="{Binding Converter={StaticResource errorsToColor}}" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
<ListView DisplayMemberPath="ErrorContent" ItemsSource="{Binding}" />
</DockPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
現在讓我們來看看當我在TextBox中鍵入一些「無效」文本時會發生什麼。
- 鍵入'Text1'並更改焦點。
調試器進入轉換器,兩個驗證器導致ListView中的兩個項目(1個錯誤和1個警告)和一個紅色邊框。 [確定] - 鍵入'文本'來糾正錯誤,改變焦點。
價值轉換器甚至沒有被擊中!當然,同樣的紅色邊框。但是ListView已經改變並且只顯示一個警告。
有人可以解釋發生了什麼嗎?爲什麼ListView收到收集更改通知和邊界不是?這是因爲ListView
是ItemsControl
而Validation.Errors
是否包含在CollectionView
?
它可能與http://stackoverflow.com/questions/2816163/when-will-the-valueconverters-convert-method-be-called-in-wpf 添加新項目Validation.Errors引發CollectionChanged事件而PropertyChanged觸發值轉換器 – yuvin