2011-03-20 134 views
6

我有一個示例mvvm應用程序。用戶界面有一個文本框,一個按鈕和一個組合框。當我在文本框中輸入內容並點擊按鈕時,我輸入的文本被添加到可觀察集合中。 Combobox綁定到該集合。如何讓組合框自動顯示新添加的字符串?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個屬性(一個用於TextBox和兩個其他用於ComboBox)和不具有參數的方法AddNewItem

的方法可以從命令觸發,但對於命令沒有標準的課,所以我將其稱之爲從代碼隱藏:作爲選擇

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

所以,你必須明確地設置添加的項目將其添加到集合後。

由於ComboBox類的方法OnItemsChanged受到保護,不能被使用。

3

如果ComboBox綁定到一個ObservableCollection,組合框會盡快集合更改更新。

這是使用一個ObservableCollection的優勢 - 你不需要做任何額外的編碼來更新UI。

如果這不是你看到的行爲,也許你可以張貼一些代碼/ XAML。