2011-03-20 12 views
6

Obtuve una aplicación mvvm de muestra. La interfaz de usuario tiene un cuadro de texto, un botón y un cuadro combinado. cuando ingreso algo en el cuadro de texto y presiono el botón, el texto que ingreso se agrega a una colección observable. El Combobox está vinculado a esa colección. ¿Cómo obtengo el combobox para mostrar automáticamente la nueva cadena agregada?WPF - Contenido del cuadro combinado de actualización automática

Respuesta

5

Como tengo entendido, desea agregar un elemento y seleccionarlo. Este es el ejemplo de cómo se puede hacer usando ViewModel y enlaces.

Xaml:

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

ViewModel:

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)); 
     } 
    } 
} 

El MainViewModel tiene 3 propiedades (uno para el TextBox y otros dos para el ComboBox) y el método AddNewItem sin parámetros.

El método puede ser disparado desde un comando, pero no hay ninguna clase estándar para los comandos, por lo que llamaremos a partir del código subyacente:

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

Así debe establecer explícitamente un elemento añadido a elección después de agregarlo a una colección.

Porque el método OnItemsChanged de la clase ComboBox está protegido y no se puede utilizar.

3

Si el ComboBox está vinculado a un ObservableCollection, el ComboBox se actualizará tan pronto como se cambie la colección.

Esa es la ventaja de utilizar un ObservableCollection; no es necesario que realice ninguna codificación adicional para actualizar la interfaz de usuario.

Si este no es el comportamiento que está viendo, quizás pueda publicar algún código/xaml.

Cuestiones relacionadas