2009-04-26 77 views
1

我想使用ValidationRules来验证几个ListBox控件至少有一个项目被选中。你可以在ListBox.SelectedItems上使用ValidationRules吗?

我试图做这样说:

<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

回答

3

验证仅在双向和单向视频源模式绑定中完成。如果您打开Binding,绑定SelectedItem以在TwoWay或OneWayToSource模式中进行标记,则会触发验证。

验证有保护目标属性。因此,当您设置标签时,验证会确保标签有效,并且可以使用新值设置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> 
+0

谢谢!就像我现在想要的那样工作。 – 2009-04-26 18:09:07