2011-01-23 60 views
0

我在wpf-mvvm应用程序中有一个可编辑的组合框。如何在可编辑的组合框中添加边框到文本框?

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

请帮忙。

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

编辑: 我需要的是重写我的编辑组合框的项目模板。我知道一个可编辑的组合框将包含两个项目=>文本框和一个列表。我需要为此文本框添加边框。

回答

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 
} 
+0

@Anish Mohan:当输入一个不在列表中的值时,此解决方案将在TextBox周围放置一个红色边框。你确定你还想要一个模板解决方案吗? – 2011-01-24 10:04:39