你可以在ListBox.SelectedItems上使用ValidationRules吗?

时间:2009-04-26 16:48:21

标签: wpf validation validationrules

我想使用ValidationRules来验证一些ListBox控件是否至少选择了一个项目。

我试过这样做:

<ListBox ItemsSource="{Binding Path=AvailableItems}"
         Behaviors:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding ChosenItems}"
         x:Name="ListBoxItems">  
    <ListBox.Tag>
        <Binding ElementName="ListBoxItems" Path="SelectedItem">
            <Binding.ValidationRules>
                <ValidationRules:NotNullValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </ListBox.Tag>
</ListBox>

但我的NotNullValidationRule永远不会被召唤。请注意,SynchronizedSelectedItems是我用来将SelectedItems同步到自定义集合(described here)的特殊附加属性。这就是为什么我对应用于Binding的'假'Tag进行验证。

有没有办法验证ListBox.SelectedItems

1 个答案:

答案 0 :(得分:3)

验证仅在TwoWay和OneWayToSource模式绑定中完成。如果你转动Binding,在TwoWay或OneWayToSource模式下将SelectedItem绑定到tag,则会触发验证。

验证是为了保护目标属性。因此,当您设置Tag时,验证会确保Tag有效,并且可以使用新值设置SelectedItem。以下代码有效(SelectedItem自动绑定TwoWay IIRC。)

<ListBox x:Name="list">
    <ListBox.SelectedItem>
        <Binding ElementName="list" Path="Tag">
            <Binding.ValidationRules>
                <local:SelectedValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </ListBox.SelectedItem> 
</ListBox>