我有一个带有性别的ComboBox(男性,女性......):我要求用户选择一个值(默认情况下ComboBox没有值。)
<ComboBox ItemsSource="{x:Static Member=data:Sex.AllTypes}" SelectedItem="{Binding Path=Sex.Value, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}" VerticalAlignment="Top">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Sex.Value是我的Person类中的一个属性:
public class Person : IDataErrorInfo
{
public string this[string columnName]
{
get
{
switch (columnName)
{
case "Sex": return Sex.Value == null ? "Required field" : null;
case "Surname": return string.IsNullOrEmpty(Nachname) ? "Required field" : null;
}
}
}
public string Error
{
get
{
return null;
}
}
}
问题是它永远不会输入这个[string columnname]。
当我尝试一个带有名字的TextBox时,它会输入这个[string columnname],一切正常:
<TextBox Style="{StaticResource textBoxInError}" Text="{Binding Path=Surname, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"/>
答案 0 :(得分:0)
我决定这样做:
当用户点击“保存”时,会发生验证。 然后我只是检查验证事件,如果 SelectedValue为空。 如果是这种情况,则意味着用户没有选择任何项目。 然后我警告他这个事实。
private void CanSave(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = myComboBox.SelectedValue != null;
}
答案 1 :(得分:0)
Windows中的好方法是在组合框中添加一个值(None),并测试该人是否包含(None)值。 “(无)”是一个元选项,因为它不是选择的有效值 - 而是描述该选项本身未被使用。
正确: alt text http://i.msdn.microsoft.com/Aa511458.DropDownLists41(en-us,MSDN.10).png
不正确: alt text http://i.msdn.microsoft.com/Aa511458.DropDownLists40(en-us,MSDN.10).png
验证在您的情况下不起作用,因为当您想要说没有选择性别时,没有选择任何值...