2011-03-20 125 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。