2011-03-20 9 views
6

샘플 mvvm 응용 프로그램이 있습니다. UI에는 텍스트 상자, 버튼 및 콤보 상자가 있습니다. 텍스트 상자에 내용을 입력하고 버튼을 누르면 입력 한 텍스트가 observablecollection에 추가됩니다. 콤보 박스는 그 컬렉션에 묶여있다. 새롭게 추가 된 문자열을 자동으로 표시하도록 콤보 박스를 얻으려면 어떻게합니까?WPF - 자동 새로 고침 콤보 상자 내용

답변

5

정확하게 알고 있듯이 항목을 추가하고 선택하려고합니다. 다음은 ViewModel 및 바인딩을 사용하여 수행 할 수있는 예제입니다.

XAML :

<StackPanel> 
    <TextBox Text="{Binding ItemToAdd}"/> 
    <ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" /> 
    <Button Content="Add" Click="Button_Click"/> 
</StackPanel> 

뷰 모델 :

public class MainViewModel:INotifyPropertyChanged 
{ 
    public ObservableCollection<string> Items { get; set; } 

    public string ItemToAdd { get; set; } 

    private string selectedItem; 

    public string SelectedItem 
    { 
     get { return selectedItem; } 
     set 
     { 
      selectedItem = value; 
      OnPropertyChanged("SelectedItem"); 
     } 
    } 

    public void AddNewItem() 
    { 
     this.Items.Add(this.ItemToAdd); 
     this.SelectedItem = this.ItemToAdd; 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

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

MainViewModel 3 개 속성 가진다 (하나를 TextBoxComboBox 다른 2 개) 및 매개 변수없이 AddNewItem 방법.

방법은 명령에서 트리거하지만, 명령에 대한 표준 클래스가없는, 그래서 코드 숨김에서 호출 할 수 있습니다 : 선택 그래서 당신이 명시 적으로 추가 된 항목을 설정해야합니다

((MainViewModel)this.DataContext).AddNewItem(); 

컬렉션에 추가 한 후

ComboBox 클래스의 OnItemsChanged 메서드가 보호되어있어 사용할 수 없기 때문에.

3

ComboBox가 ObservableCollection에 바인딩 된 경우 ComboBox는 컬렉션이 변경되는 즉시 업데이트됩니다.

ObservableCollection을 사용하면 이점이 있습니다. UI를 업데이트하기 위해 별도의 코딩 작업을 수행 할 필요가 없습니다.

이것이 보이는 동작이 아니라면, 아마도/xaml이라는 코드를 게시 할 수 있습니다.