我想使用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
?
答案 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>