2009-04-26 76 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