2009-04-26 8 views
1

Я хочу использовать ValidationRules, чтобы убедиться, что несколько элементов управления ListBox имеют хотя бы один элемент.Можете ли вы использовать ValidationRules в ListBox.SelectedItems?

Я пытался делать это так:

<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

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

Спасибо! Работает так же, как сейчас. –

Смежные вопросы