c# - WPF: contenido del cuadro combinado de actualización automática
mvvm combobox (2)
Como entiendo correctamente, desea agregar un elemento y seleccionarlo. Aquí está 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));
}
}
}
MainViewModel
tiene 3 propiedades (una para el TextBox
y otras dos para ComboBox
) y el método AddNewItem
sin parámetros.
El método se puede activar desde un comando, pero no hay una clase estándar para los comandos, así que lo llamaré desde el código subyacente:
((MainViewModel)this.DataContext).AddNewItem();
Por lo tanto, debe establecer explícitamente un elemento agregado como seleccionado después de agregarlo a una colección.
Porque el método OnItemsChanged
de la clase ComboBox
está protegido y no se puede usar.
Tengo 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?
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 necesita hacer ninguna codificación adicional para actualizar la UI.
Si este no es el comportamiento que está viendo, quizás pueda publicar algún código / xaml.