在不使用Binding的情况下验证Combobox.SelectedItem

时间:2012-07-27 19:57:41

标签: c# wpf data-binding combobox

这个问题基于this solution,但我不知道怎么能用ComboBox来解决这个问题。我想验证在单击提交按钮时,组合框有一个选定的项目,并且不为空。

请注意,我没有故意约束任何事情,而不是因为我不知道如何做。但如果答案是我无法使用验证规则而没有绑定(特别是ComboBoxes,我已通过链接解决方案将其完成到文本框),请告诉我。我无法接受Binding Solutions的答案。

从链接中获取解决方案,以下是我在文本框中使用验证而不绑定的方法:

<TextBox.Text>
    <Binding RelativeSource="{RelativeSource Self}" Path="Text" UpdateSourceTrigger="LostFocus">       
        <Binding.ValidationRules>
            <Filters:IntegersOnlyValidator/>
        </Binding.ValidationRules>    
    </Binding>  
</TextBox.Text> 

这是我到目前为止所做的:

XAML:

<ComboBox DataContext="{StaticResource ChargeAssigneeViewSource}" Name="ChargeAssigneeBox" ItemsSource="{Binding}" Width="85">
    <ComboBox.SelectedItem>
        <Binding RelativeSource="{RelativeSource Self}" Path="GetType" Mode="TwoWay">
            <Binding.ValidationRules>
                <my:ComboBoxValidationRule ErrorMessage="Please select an Assignee" />
            </Binding.ValidationRules>
        </Binding>
    </ComboBox.SelectedItem>
</ComboBox>

验证规则:

class ComboBoxValidationRule : ValidationRule
{
    private string errorMessage;

    public string ErrorMessage
    {
        get { return errorMessage; }
        set { errorMessage = value; }
    }
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (value == null)

            return new ValidationResult(false, ErrorMessage);

        return new ValidationResult(true, null);

    }
}

按钮点击:

private void AddAnHours()
    {
        Employee currEmployee;

        if (!ValidateElement.HasError(ChargeAssigneeBox))
        {
            if (!ValidateElement.HasError(analystTimeTxtBox))
            {
                currEmployee = ChargeAssigneeBox.SelectedItem as Employee;
                item.AddTime(currEmployee, DateTime.Now, double.Parse(analystTimeTxtBox.Text));
                analystTimeTxtBox.Clear();
                ChargeAssigneeBox.SelectedItem = null;
            }
        }

        UpdateTotals();

    }

我得到的错误就在这一行:

currEmployee = ChargeAssigneeBox.SelectedItem as Employee;

但我的ItemsSource正确绑定,所以即使我选择了一个项目,选择项目也不会将其转换为员工对象。我怀疑它与我绑定它有什么关系:

<Binding RelativeSoruce="{RelativeSource Self}" Path="GetType"....>

非常感谢帮助,谢谢。

0 个答案:

没有答案