【问题标题】:ObservableCollection does not raise property changed with FodyObservableCollection 不会引发使用 Fody 更改的属性
【发布时间】:2015-05-22 10:43:00
【问题描述】:

我已经定义了这个类

[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。你必须自己做。
  • 您可能还需要显示您的 xaml 代码,以了解当消息集合更改时如何通知视图?接下来,如果不是在您的 xaml 代码中编写,您可能必须手动引发 LastMessage 的 propertyChanged 事件。

标签: c# binding windows-phone-8.1 observablecollection


【解决方案1】:

LastMessage 不会对集合更改做出反应,因为消息保持不变。 你需要订阅你的 observable 集合的事件。

[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();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    相关资源
    最近更新 更多