문제

특정 컬렉션의 컨텍스트 내에서 특정 속성이 고유하도록 적용하기 위해 사용자 지정 WPF ValidationRule을 작성하려고 합니다.예를 들어:ListView에 바인딩된 사용자 지정 개체 컬렉션을 편집하고 있으며 컬렉션에 있는 각 개체의 Name 속성이 고유한지 확인해야 합니다.이 작업을 수행하는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

먼저 컬렉션을 보관할 간단한 종속성 개체 클래스를 만듭니다.

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를 반환합니다.

다른 팁

규칙에 바인딩하려는 다른 속성이 있는 경우에만 사용자 지정 종속성 개체를 만들었습니다.이 경우 우리가 하는 일은 확인할 값의 단일 컬렉션을 연결하는 것뿐이므로 <UniqueValueValidationRule.OtherValues> 속성 a <CollectionContainer>.

거기서부터 문제를 극복하기 위해 DataContext 상속받지 않고, <TextBox.Resources> 가지고 있어야합니다 <CollectionViewSource> 실제 바인딩을 유지하고 {StaticResource} 열쇠, 어느 OtherValues 그런 다음 바인딩 소스로 사용할 수 있습니다.

그러면 유효성 검사 규칙 자체는 루프스루만 하면 됩니다. OtherValues.Collection 그리고 동등성 검사를 수행합니다.

관찰하다:

    <TextBox>
        <TextBox.Resources>
            <CollectionViewSource x:Key="otherNames" Source="{Binding OtherNames}"/>
        </TextBox.Resources>
        <TextBox.Text>
            <Binding Path="Name">
                <Binding.ValidationRules>
                    <t:UniqueValueValidationRule>
                        <t:UniqueValueValidationRule.OtherValues>
                            <CollectionContainer Collection="{Binding Source={StaticResource otherNames}}"/>
                        </t:UniqueValueValidationRule.OtherValues>
                    </t:UniqueValueValidationRule>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top