【问题标题】:Update current class property when any item in observable collection changes当可观察集合中的任何项目更改时更新当前类属性
【发布时间】:2014-05-23 22:17:04
【问题描述】:

我有课

public class SomeModel : INotifyPropertyChanged {

  public ObservableCollection<SomeSubModel> SubModels {get; set;}

  public int Sum { get { return SubModels.Sum(x=> x.Count) }}

  private string _url;
  public string Url
  {
    get { return _url; }
    set
    {
        _url = value;
        OnPropertyChanged();
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  [NotifyPropertyChangedInvocator]
  protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
  {
    var handler = PropertyChanged;
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
  }

}

public class SomeSubModel : INotifyPropertyChanged {

  private string _count;
  public string Count
  {
    get { return _count; }
    set
    {
        _count = value;
        OnPropertyChanged();
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  [NotifyPropertyChangedInvocator]
  protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
  {
    var handler = PropertyChanged;
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
  }

}

我将在 WPF UI 中使用绑定到 SomeSubModel.Sum

SomeSubModel.Count 属性更改非常频繁。

SomeModel.SubModels observable 集合中任何项目的属性SomeSubModel.Count 更改以通过绑定反映WPF UI 中的实际SomeSubModel.Sum 时,如何通知SomeSubModel.Sum 更改?

主要目标是在 UI 中反映可观察集合中所有 Count 对象的实际总和。

谢谢!

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    在这种情况下,您也应该为 Sum 属性触发一个更改的通知属性:

    private string _count;
    public string Count
    {
        get { return _count; }
        set
        {
            _count = value;
            OnPropertyChanged();
            var handler = PropertyChanged;
            if (handler != null) 
                handler(this, new PropertyChangedEventArgs("Sum"));
        }
    }
    

    【讨论】:

    • 如果“Count”和“Sum”是不同类的属性会起作用吗?
    • 不,你必须在另一个类上调用一个方法,告诉它引发PropertyChanged。在这种情况下,我会重新考虑设计,尽管如果没有看到您的实际用例,很难判断如何。
    • 我写了一个简单的分段下载管理器。每个文件下载实际上是由几个部分并行完成的。有一个 FileDownload 类(来自示例的 SomeModel)和 FileSegment 类(来自示例的 SomeSubModel)。 FileDownload 包含 FileSegments 的集合。实际下载反映在 FileSegment 模型中,但为了总结所有内容并在 GUI 中向用户显示,使用了 FileDownload 模型。这是真正的用例。
    • 那么你需要FileSegments 类来调用FileDownload 类的方法,这反过来又会为Sum 引发PropertyChanged
    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 2010-11-04
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多