ValidationRule强制使用唯一名称

时间:2020-03-05 18:45:06  来源:igfitidea点击:

我试图编写一个自定义WPF ValidationRule,以强制某个属性在给定集合的上下文中是唯一的。例如:我正在编辑绑定到ListView的自定义对象的集合,并且我需要确保集合中每个对象的Name属性是唯一的。有谁知道如何做到这一点?

解决方案

回答

首先,我将创建一个简单的DependencyObject类来保存集合:

class YourCollectionType : DependencyObject {

    [PROPERTY DEPENDENCY OF ObservableCollection<YourType> NAMED: BoundList]

}

然后,在ValidationRule派生的类上,创建一个属性:

YourCollectionType ListToCheck { get; set; }

然后,在XAML中,执行以下操作:

<Binding.ValidationRules>
    <YourValidationRule>
       <YourValidationRule.ListToCheck>     
          <YourCollectionType BoundList="{Binding Path=TheCollectionYouWantToCheck}" />
       </YourValidationRule.ListToCheck>
    </YourValidationRule>
</Binding.ValidationRules>

然后在验证中,查看要验证的项目的ListToCheck的BoundList属性的集合。如果在其中,显然会返回错误的验证结果。如果不是,则返回true。