Набор инструментов WPF AutoCompleteBox не обновляет свои данные - PullRequest
0 голосов
/ 20 марта 2011

В AutoCompleteBox я выбираю «AAAA», ведьма - это имя первого человека в моей коллекции Persons. После этого я нажимаю кнопку, которая меняет имя первого человека на «Дженифер». Код работает нормально, но выбранный элемент AutocompleteBox, кажется, не обновляется.

Как я могу обновить выбранный элемент после изменения имени?

enter image description here

XAML:

  <Grid Background="LightBlue" >
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Controls:AutoCompleteBox x:Name="autoCompleteBox" Populating="autoCompleteBox_Populating" Height="30">
    </Controls:AutoCompleteBox>
    <Button Grid.Row="1" Click="Button_Click">Change first person Name</Button>
</Grid>

CodeBehind:

 public partial class Window1 : Window {
    public delegate void SearchResults(IEnumerable results);
    public ObservableCollection<Person> Persons { get; set; }

    public Window1() {
        Persons = new ObservableCollection<Person> {
                                       new Person {Name = "AAAA"},
                                       new Person {Name = "BBBB"},
                                       new Person {Name = "CCCC"},
                                   };
        InitializeComponent();
    }

    private void autoCompleteBox_Populating(object sender, PopulatingEventArgs e) {
        e.Cancel = true;
        Search(autoCompleteBox.SearchText, delegate(IEnumerable results) {
            autoCompleteBox.ItemsSource = results;
            autoCompleteBox.PopulateComplete();
        });
    }

    private void Search(string phrase, SearchResults resultsDelegate) {
        var results = new ObservableCollection<Person>();
        foreach (var person in Persons) {
            if (person.Name.ToLower().Contains(phrase.ToLower())) {
                results.Add(person);
            }
        }

        resultsDelegate(results);
    }

    private void Button_Click(object sender, RoutedEventArgs e) {
        Persons.FirstOrDefault(p => p.Name == "Aaaaa").Name = "Jennifer";
    }
}

public class Person {
    public string Name { get; set; }
    public override string ToString() {
        return Name;
    }
}

1 Ответ

0 голосов
/ 20 марта 2011

Самый простой способ - изменить свойство Text:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Persons.FirstOrDefault(p => p.Name == "AAAA").Name = "Jennifer";
        if(autoCompleteBox.Text == "AAAA")
            autoCompleteBox.Text = "Jennifer";
    }

Поскольку текстовое поле не имеет ничего общего со свойством SelectedItem, оно связано только со свойством Text.

...