ObservableCollection在使用Fody时不会触发属性更改事件

4
我已经定义了这个类。
[ImplementPropertyChanged]
public class ChatInfo : IMessageData
{
    public ObservableCollection<Message> messages { get; set; }

    [JsonIgnore]
    public Message LastMessage
    {
        get
        {
            return messages.Last();
        }
    }
}

这个类通过JSON.NET(James King)进行反序列化,然后我手动向messages中添加新项。 LastMessage属性绑定到一个视图,但是即使messages集合发生变化,LastMessage的getter也不会被调用。每次将messages设置为新的集合时,一切都正常工作,为什么LastMessage不会对ObservableCollection的集合更改事件做出反应?

我怀疑 Fody.PropertyChanged 是否分析代码并订阅 CollectionChanged。你必须自己完成这个任务。 - Charles Mager
你可能需要展示你的XAML代码,以便了解当消息集合发生变化时视图如何被通知。接下来,如果它没有在你的XAML代码中编写,你可能需要手动触发LastMessage的propertyChanged事件。 - Rohit Prakash
1个回答

4

LastMessage没有对集合的更改做出反应,因为消息保持不变。 您需要订阅可观察集合的事件。

[ImplementPropertyChanged]
public class ChatInfo : IMessageData
{
  public ObservableCollection<Message> messages { get; set; }

  messages.CollectionChanged += new
  System.Collections.Specialized.NotifyCollectionChangedEventHandler(MessageChanged);

  [JsonIgnore]
  public Message LastMessage {get; private set;}


  private void MessageChanged(object sender, NotifyCollectionChangedEventArgs e) 
  {
   //set the property here
   LastMessage = messages.Last();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接