Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF工具包自动完成盒不';不要刷新它的数据_Wpf_Binding_Wpftoolkit - Fatal编程技术网

WPF工具包自动完成盒不';不要刷新它的数据

WPF工具包自动完成盒不';不要刷新它的数据,wpf,binding,wpftoolkit,Wpf,Binding,Wpftoolkit,在自动完成框中,我选择“AAAA”,它是我个人收藏中第一个人的名字。 之后,我按下按钮,将第一个人的名字改为“Jeniffer”。 代码运行正常,但自动完成框中的选定项似乎没有刷新 更改名称后如何刷新所选项目 XAML: 更改第一人称 代码隐藏: public partial class Window1 : Window { public delegate void SearchResults(IEnumerable results); public Observable

在自动完成框中,我选择“AAAA”,它是我个人收藏中第一个人的名字。 之后,我按下按钮,将第一个人的名字改为“Jeniffer”。 代码运行正常,但自动完成框中的选定项似乎没有刷新

更改名称后如何刷新所选项目

XAML:


更改第一人称
代码隐藏:

 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:窗口{
公共委托无效搜索结果(IEnumerable results);
公共可观察集合人员{get;set;}
公共窗口1(){
人员=新观察到的集合{
新人{Name=“AAAA”},
新人{Name=“BBBB”},
新人{Name=“CCCC”},
};
初始化组件();
}
私有void自动完成框填充(对象发送方,填充事件参数e){
e、 取消=真;
搜索(autoCompleteBox.SearchText,委托(IEnumerable results){
autoCompleteBox.ItemsSource=结果;
autoCompleteBox.PopulateComplete();
});
}
私有无效搜索(字符串短语、搜索结果resultsDelegate){
var结果=新的ObservableCollection();
foreach(var个人对个人){
if(person.Name.ToLower().Contains(phrase.ToLower())){
结果:增加(人);
}
}
结果代表(结果);
}
私有无效按钮\u单击(对象发送者,路由目标e){
Persons.FirstOrDefault(p=>p.Name==“Aaaaa”).Name=“Jennifer”;
}
}
公共阶层人士{
公共字符串名称{get;set;}
公共重写字符串ToString(){
返回名称;
}
}

最简单的方法是更改文本属性:

    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属性连接。

您尚未实现INotifyPropertyChanged。也许这是问题的根源。我将测试你的代码,并说我的假设是否正确。不需要测试@vortex,这是部分原因。另一个问题是使用适当的显示成员。什么是适当的显示成员?@vortex-INotifyPropertyChanged没有帮助。您还必须更改Text属性,因为这个属性和其他属性是分开的,并且没有观察到绑定模型的变化。谢谢@vorrtex,但是这段代码只是为了显示我的问题。在实际代码中,列表不会在按钮单击事件中更改,而是在ViewModel中更改。我的视图中只有AutoCompletBox。因此,我注意到名称正在更改的范围。@Erez您可以将自动完成框的Text属性绑定到ViewModel的任何属性。我看不出有什么问题不能解决。如果你编辑你的问题并提供更接近真实代码的代码,我会回答。
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Persons.FirstOrDefault(p => p.Name == "AAAA").Name = "Jennifer";
        if(autoCompleteBox.Text == "AAAA")
            autoCompleteBox.Text = "Jennifer";
    }