Правило валидации сетки данных Wpf для уникального поля
Я получил Suclassed ValidationRule с именем UniqueNameSolidWoodRule, чтобы проверить наличие дублирующихся записей в сетке данных.
Вот код:
<code>public class UniqueNameSolidWoodRule : ValidationRule { public CollectionViewSource CurrentCollection { get; set; } public override ValidationResult Validate(object value, CultureInfo cultureInfo) { if (value != null) { ObservableCollection<SolidWood_VM> castedCollection = (ObservableCollection<SolidWood_VM>)CurrentCollection.Source; foreach (SolidWood_VM swVM in castedCollection) { if (swVM.Designation == value.ToString()) { return new ValidationResult(false, ResourcesManager.Instance.GetString("DuplicatedRecord")); } } } return new ValidationResult(true, null); } } </code>
А вот фрагмент кода XAML:
<code><DataGrid.Resources> <CollectionViewSource x:Key="CurrentSolidWoodCollection" Source="{Binding Path=SolidWoods}" /> </DataGrid.Resources> <DataGridTextColumn x:Name="Column2" Header="{x:Static p:Resources.Designation}" Width="auto"> <DataGridTextColumn.Binding> <Binding Path="Designation" ValidatesOnDataErrors="True" UpdateSourceTrigger="LostFocus"> <Binding.ValidationRules> <my:UniqueNameSolidWoodRule CurrentCollection="{StaticResource CurrentSolidWoodCollection}"/> </Binding.ValidationRules> </Binding> </DataGridTextColumn.Binding> </DataGridTextColumn> </code>
Моя проблема в том чтоsometimes это правило сравнивает значение со своей строкой. Как я мог предотвратить это? Мне кажется, мне нужно свойство row.index, связанное со значением, для сравнения, но, к сожалению, я не могу найти выход для достижения этой цели.