WPF - 绑定ValidationRules到Combobox.Text属性

Jit*_*thu 3 validation wpf combobox

我正在使用ComboBoxIsEditable值设置为true 的WPF .基本上,我有一个项目列表显示在ComboBox.如果用户没有找到合适的时间,用户可以输入时间ComboBox.

我已将ValidationRule附加到my,ComboBox.SelectedItem以便每当用户选择一个时间时,我的ValidationClass被调用(从ValidationRule派生).这一切都很好.

由于我ComboBox是可编辑的,用户可以输入自己的时间.每次输入值int时都会调用验证类,ComboBox并且传递给该类的值是我输入的值.现在问题是,如果用户键入的值不是comobbox项的一部分验证类以null值调用,因此无法验证任何内容.

谁能告诉我如何验证ComboBox.Text用户输入的项目?

我的验证课程:

public class TimeValidateRule : ValidationRule
{        

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        TimeClass timeObj = value as TimeClass;
        TimeSpan time;

       if(timeObj == null)
            return new ValidationResult(false, "Invalid Time");

        if(timeObj.Time.Length < 5)
            return new ValidationResult(false, "Invalid Time");
        try
        {
            time = TimeSpan.Parse(timeObj.Time);
        }
        catch
        {
            return new ValidationResult(false, "Invalid Time");
        }

        // Get Current time (Arizona time)
        if(!CheckAgainstArizonaTime(time))
            return new ValidationResult(false, "Invalid Time");

        return new ValidationResult(true, null);
    }
}        
Run Code Online (Sandbox Code Playgroud)

ComboBox xaml中的声明:

                     <ComboBox ItemsSource="{Binding Source={StaticResource TimeSelections}}"
                          ItemTemplate="{StaticResource TimeListTemplate}"                              
                          Validation.ErrorTemplate="{StaticResource ValidationTemplate}"                              
                          Height="30" Width="100"                                  
                          Name="cbTimes"                              
                          >                                     
                    <ComboBox.SelectedItem>
                        <Binding 
                            Path="SelectedTime"                                
                            UpdateSourceTrigger="PropertyChanged"                               
                            >
                            <Binding.ValidationRules>
                                <validators:TimeValidateRule/>                                                       
                            </Binding.ValidationRules>
                        </Binding>
                    </ComboBox.SelectedItem>

                </ComboBox>
Run Code Online (Sandbox Code Playgroud)

谢谢,Jithu

ill*_*ant 7

我知道现在为时已晚,但也许这会对某人有所帮助:与Text财产结合ComboBox,而不是SelectedItem


abm*_*bmv 0

您需要使用事件处理程序等处理代码和异常,请在网上检查以获取更多示例