2012-11-06 2 views
2

WPF에서 편집 가능한 콤보 박스가 있습니다 (IsEditable = True). 또한 사용자가 입력 한 값이 목록에만 있는지 확인하고자합니다. 나는 사용자가 자신의 값을 콤보에 추가하기를 원하지 않는다. IsReadonly = true로 설정하면 사용자가 입력 할 수 없기 때문에 true로 설정할 수 없습니다. 유효성 검사는 SelectionChange 이벤트에서 유일한 옵션입니까? 또는 동일한 작업을 수행하는 더 좋은 방법이 있습니까?편집 가능한 콤보 박스와 유효한 선택

감사합니다. Shankara Narayanan.

+0

당신이 원하는 어떤 행동을 궁금해? –

+0

그냥 사용자가 드롭 다운에있는 것과는 다른 것을 입력하고 싶지 않습니다. – Shankar

답변

1

테스트를 빨간색으로 만들어 입력 내용이 잘못되었다는 사실을 사용자가 알 수 있도록했습니다. 그러나 비슷한 접근법을 사용하여 다른 일을 할 수 있습니다.

XAML :

<Window x:Class="local.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:EditableComboBox="clr-namespace:EditableComboBox" 
    Title="MainWindow" Height="350" Width="525"> 
    <Window.DataContext> 
     <EditableComboBox:ComboBoxViewModel /> 
    </Window.DataContext> 
    <StackPanel> 
     <ComboBox IsEditable="True" Foreground="{Binding ComboBoxColor, Mode=TwoWay}" Text="{Binding ComboBoxText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
    </StackPanel> 
</Window> 

강령 :

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Text; 
using System.Windows.Media; 

namespace EditableComboBox 
{ 
    class ComboBoxViewModel : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private string m_ComboBoxText; 
     public string ComboBoxText 
     { 
      get { return m_ComboBoxText; } 
      set 
      { 
       m_ComboBoxText = value; 
       OnPropertyChanged("ComboBoxText"); 
       ValidateText(); 
      } 
     } 

     private void ValidateText() 
     { 
      if (ComboBoxText.Length % 2 == 0) 
       ComboBoxColor = Brushes.Black; 
      else 
       ComboBoxColor = Brushes.Red; 
     } 

     private Brush m_ComboBoxColor; 
     public Brush ComboBoxColor 
     { 
      get { return m_ComboBoxColor; } 
      set 
      { 
       m_ComboBoxColor = value; 
       OnPropertyChanged("ComboBoxColor"); 
      } 
     } 

     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
0

괜찮은 .. 여기에 내가이 LostFocus 이벤트에

List<dynamic> list = cmbToAcc.ItemsSource as List<dynamic>; 
     var result = from s in list 
        where (string)s.Name == (string)cmbToAcc.Text 
        select s; 

     if (result.Count() <= 0) 
     { 
      Helper.Inform("Please select a valid value."); 
      cmbToAcc.SelectedIndex = 0; 
      cmbToAcc.Focus(); 
     } 

을 한 것입니다.

나는 이것이 가장 좋은 방법인지 아닌지 확실하지 않다

..하지만 목적을

감사

카라 나라 야난를 제공

관련 문제