Можете ли вы использовать ValidationRules для ListBox.SelectedItems? - PullRequest
1 голос
/ 26 апреля 2009

Я хочу использовать 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?

1 Ответ

3 голосов
/ 26 апреля 2009

Проверка выполняется только в привязках режима TwoWay и OneWayToSource. Если вы включите 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>
...