2011-01-23 101 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