2009-04-26 6 views
1

Ich möchte ValidationRules verwenden, um zu überprüfen, dass einige wenige ListBox Steuerelemente mindestens ein Element ausgewählt haben.Können Sie ValidationRules für ListBox.SelectedItems verwenden?

ich es auf diese Weise versucht, zu tun:

<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> 

Aber mein NotNullValidationRule nie aufgerufen wird. Beachten Sie, dass die SynchronizedSelectedItems eine spezielle angefügte Eigenschaft ist, die ich verwende, um die SelectedItems mit einer benutzerdefinierten Sammlung (described here) zu synchronisieren. Deshalb mache ich meine Validierung auf eine "falsche" Binding angewendet auf Tag statt.

Gibt es eine Möglichkeit, ListBox.SelectedItems zu validieren?

Antwort

3

Die Validierung erfolgt nur in TwoWay- und OneWayToSource-Modus-Bindungen. Wenn Sie die Bindung umbinden und SelectedItem binden, um sie im TwoWay- oder OneWayToSource-Modus zu markieren, wird die Validierung ausgelöst.

Validierung dient zum Schutz der Zieleigenschaft. Wenn Sie also Tag festlegen, stellt die Validierung sicher, dass das Tag gültig ist und SelectedItem mit einem neuen Wert festgelegt werden kann. Der folgende Code funktioniert (SelectedItem bindet TwoWay automatisch IIRC.)

<ListBox x:Name="list"> 
    <ListBox.SelectedItem> 
     <Binding ElementName="list" Path="Tag"> 
      <Binding.ValidationRules> 
       <local:SelectedValidationRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </ListBox.SelectedItem> 
</ListBox> 
+0

Vielen Dank! Funktioniert genau so, wie ich es jetzt möchte. –

Verwandte Themen