Observable Collection 未更新(可观察的类项集合内的字符串的可观察集合)

Posted

技术标签:

【中文标题】Observable Collection 未更新(可观察的类项集合内的字符串的可观察集合)【英文标题】:Observable Collection is not being Updated (observable collection of strings inside an observable collection of class item) 【发布时间】:2021-12-21 06:50:27 【问题描述】:

我有 2 个名为 person 和 Remainder 的类

这是剩余类的详细信息,它包含一个可观察的集合名称 zuids

        public string Description;
        public DateTime DateAndTime;
        public string dateandtime;
        public bool isCompleted;
        public ObservableCollection<string> zuids;
        public string channelId;

这是个人类

 public string zuid;
        public string name,email;
        public Remainder r  get; set; 
        public Person(string id,string name,string email)
        
            this.zuid = id;
            this.name = name;
            this.email = email;
        

我刚刚创建了这个 UI

主页

public List<Person> Persons = new List<Person>();
 public List<Remainder> Remainders = new List<Remainder>();

 public ObservableCollection<Remainder> RemaindersForMe = new ObservableCollection<Remainder>();

(这些对我来说的剩余部分显示在图片右侧的剩余列表中)

所以在弹出框中,我有一个添加按钮,可以将用户添加到其余部分,因此,当我从自动建议框中选择某个人的名称时,他们各自的 id 会更新到剩余部分 zuids 可观察集合中。但是当我添加它时,它没有被更新,因为我试图用旧的值创建新的余数,并且新的余数更新的人会正确显示。

这是自动提示框 这是我的代码

<Button Name="AddMorePeople" Content="+" CornerRadius="25" FontSize="20">
                                                        <Button.Flyout>
                                                            <Flyout>
                                                                <StackPanel >
                                                                    <AutoSuggestBox 
                                                                        Name="MyAutoSuggestBox1" 
                                                                        PlaceholderText="Search"  
                                                                        Width="150"
                                                                        SuggestionChosen="MyAutoSuggestBox1_SuggestionChosen"
                                                                        TextChanged="MyAutoSuggestBox_TextChanged"
                                                                        PointerEntered="MyAutoSuggestBox_PointerEntered"
                                                                        Tag="x:Bind RemainderId"
                                                                     />
                                                                </StackPanel>
                                                            </Flyout>
                                                        </Button.Flyout>
                                                    </Button>

这是图片中显示的添加按钮,单击添加按钮会打开自动建议框

private void MyAutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        
            var Auto = (AutoSuggestBox)sender;
            List<string> Suggestion;
            if (string.IsNullOrEmpty(Auto.Text))
                Suggestion = Peoplenames.Where(p=>p!="excludedname").ToList();
            else
                Suggestion = Peoplenames.Where(p => p.StartsWith(Auto.Text, StringComparison.OrdinalIgnoreCase) && p!="excludedname" ).ToList();
            Auto.ItemsSource = Suggestion.ToArray();
            
        

private void MyAutoSuggestBox1_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
        
            int value = (int)sender.Tag;
            
            foreach(var i in RemaindersForMe.ToList())
            
                if(i.RemainderId==value)
                
                    foreach(var j in Persons)
                    
                        if(j.name==args.SelectedItem.ToString())
                        
                            i.zuids.Add(j.zuid);
                            //Testingbox.Text = i.zuids.Count.ToString();
                            break;
                        
                    
                    break;
                
            

在测试框中,用户数正常显示,但在remianders列表中没有更新。

请帮忙 提前致谢

【问题讨论】:

请提供最少的可重现示例,至少是带有绑定和初始化代码的 XAML。 @AlexeyRumyantsev Hai 我更新了请看一下 public ObservableCollection&lt;string&gt; zuids; 我没有看到任何代码实例化该可观察的集合,是代码i.zuids.Count.ToString() 抛出NullReferenceException 让我帮你! 在Skype上联系我:shakir_820 【参考方案1】:

您必须使用 INotifyProperyChanged 来反映更改。您还必须使用 x:Bind, Mode=TwoWay。

【讨论】:

以上是关于Observable Collection 未更新(可观察的类项集合内的字符串的可观察集合)的主要内容,如果未能解决你的问题,请参考以下文章

触发更改事件后,Kendo Observable 未更新

MVVM Binding Observable Collection 来查看?

角度2:组件中未更新服务变量

如何在 RxSwift 中延迟从 Collection 中逐一发出项目

可观察的集合未更新

observableArray未通过完整数组传递更新