如何在可编辑的组合框中添加边框到文本框?

时间:2011-01-23 19:00:59

标签: wpf mvvm combobox

我在wpf-mvvm应用程序中有一个可编辑的组合框。

我想在可编辑的组合框中为文本框添加边框。 (此边框将显示为红色..如果用户在组合框中键入一些无效条目。)

请帮忙。

<ComboBox ItemsSource="{Binding Path = ContractNumberList }" Width="90" IsEditable="True" SelectedItem="{Binding Path = ContractNumber,Mode=TwoWay}"
Text="{Binding Path = ContractNumber, UpdateSourceTrigger=LostFocus}">
</ComboBox>

编辑: 我需要的是覆盖我的可编辑组合框的项目模板。我知道一个可编辑的组合框将包含两个项目=&gt;文本框和列表。我需要在此文本框中添加边框。

2 个答案:

答案 0 :(得分:1)

您可以使用ValidationRules,但我认为这将非常棘手,因为您必须将ContractNumberList传递给它以检查其有效性。更简单的方法是使ViewModel实现IDataErrorInfo,为ValidatesOnDataErrors="True"绑定设置Text,然后从ViewModel进行有效性检查。它看起来与此类似

<ComboBox ItemsSource="{Binding Path=ContractNumberList}"
          Width="90"
          IsEditable="True"
          SelectedItem="{Binding Path=ContractNumber,
                                 Mode=TwoWay}"
          Text="{Binding Path=ContractNumber,
                         UpdateSourceTrigger=LostFocus,
                         ValidatesOnDataErrors=True}"/>

查看模型

public class YourViewModel : IDataErrorInfo
{
    // ...
    public string ContractNumber
    {
        get;
        set;
    }
    // etc.

    #region IDataErrorInfo Members

    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get
        {
            string returnValue = string.Empty;
            if (columnName == "ContractNumber")
            {
                if (ContractNumberList.IndexOf(ContractNumber) < 0)
                {
                    returnValue = "Invalid selection";
                }
            }
            return returnValue;
        }
    }

    #endregion
}

答案 1 :(得分:0)

您必须使用验证规则

以下是几个链接
http://msdn.microsoft.com/en-us/library/system.windows.controls.validationrule.aspx http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
http://www.wpftutorial.net/DataValidation.html