1

我想用来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到自定义集合(在此处描述)。这就是为什么我对应用的“假”Binding进行验证的原因Tag

有没有办法验证ListBox.SelectedItems

4

1 回答 1

3

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

验证是为了保护目标属性。因此,当您设置 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>
于 2009-04-26T17:11:18.163 回答