WPF - автоматическое обновление содержимого списков - PullRequest
6 голосов
/ 21 марта 2011

Я получил пример приложения mvvm.Пользовательский интерфейс имеет текстовое поле, кнопку и поле со списком.когда я вписываю что-то в текстовое поле и нажимаю кнопку, вводимый текст добавляется в наблюдаемую коллекцию.Combobox связан с этой коллекцией.Как получить в выпадающем списке автоматическое отображение недавно добавленной строки?

Ответы [ 2 ]

5 голосов
/ 21 марта 2011

Как я правильно понимаю, вы хотите добавить элемент и выбрать его.Вот пример того, как это можно сделать с помощью ViewModel и привязок.

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 имеет 3 свойства (один для TextBox и два других для ComboBox) и метод AddNewItem без параметров.

Метод может быть вызван из команды, но стандартного класса для команд нет, поэтому я назову его из кода:

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

Так что вы должны явно установитьдобавленный элемент, выбранный после добавления его в коллекцию.

Поскольку метод OnItemsChanged класса ComboBox защищен и не может использоваться.

3 голосов
/ 21 марта 2011

Если ComboBox привязан к ObservableCollection, ComboBox будет обновлен, как только коллекция будет изменена.

Это преимущество использования ObservableCollection - вам не нужно делать никакого дополнительного кодирования дляобновите пользовательский интерфейс.

Если это не то поведение, которое вы видите, возможно, вы можете опубликовать некоторый код / ​​xaml.

...