Wpf datagrid validationrule para campo único
Tengo una ValidationRule suclassed llamada UniqueNameSolidWoodRule para validar entradas duplicadas en un datagrid.
Aquí está el código:
<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>
Y aquí está el fragmento de código 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>
Mi problema es quealgunas veces esta regla compara el valor con su propia fila. ¿Cómo podría evitar esto? Me parece que necesito una propiedad row.index asociada con el valor para comparar, pero desafortunadamente no puedo encontrar una salida para lograrlo.