我有一个Listview,其中包含一个包含TextBox的列和另一个包含ComboBox的列。
此验证适用于TextBox:
<GridViewColumn Header="SQL Server">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Width="140">
<TextBox.Text>
<Binding Path="Server" Mode="TwoWay" NotifyOnValidationError="True"
ValidatesOnExceptions="True" ValidatesOnDataErrors="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<helpers:DatabaseServerNameValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
但是当我使用ComboBox尝试相同的方法时,我的验证器永远不会被调用:
<GridViewColumn Header="Database Type">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox Width="140" ItemsSource="{Binding Source={StaticResource DatabaseTypeFromEnum}}" SelectedItem="{Binding DatabaseType, Mode=TwoWay}">
<ComboBox.SelectedValue>
<Binding Path="DatabaseType"
NotifyOnValidationError="True"
ValidatesOnExceptions="True"
ValidatesOnDataErrors="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<helpers:DatabaseTypeValidationRule />
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedValue>
</ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我还尝试将<ComboBox.SelectedValue>
替换为<ComboBox.SelectedValuePath>
,但效果不佳。
我的问题可能在于ComboBox的绑定路径,但我现在只是吵架。
谢谢!
答案 0 :(得分:1)
问题是您为comboBox绑定了 SelectedItem
和 SelectedValue
。此外,他们与同一财产捆绑在一起。
摆脱SelectedItem绑定 ,它会正常工作。 (SelectedItem优先于SelectedValue)
<GridViewColumn Header="Database Type">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox Width="140"
ItemsSource="{Binding Source={StaticResource
DatabaseTypeFromEnum}}">
<ComboBox.SelectedValue>
<Binding Path="DatabaseType"
NotifyOnValidationError="True"
ValidatesOnExceptions="True"
ValidatesOnDataErrors="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<helpers:DatabaseTypeValidationRule />
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedValue>
</ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>