c# - WPF DataGrid ItemsSource 绑定(bind)到 ObservableCollection 不会更新超出第一个设置?

标签 c# .net wpf observablecollection

我通过 DataGrid 的“ItemSource”将 WPF 应用程序 DataGrid 绑定(bind)到 ObservableCollection。最初 DataGrid 确实提供了标题和值,但是对 ObservableCollection 所做的升级没有反射(reflect)出来? (即当我以编程方式返回并增加“Total”值时)我正在使用的 ObservableCollection 如下。

任何想法为什么以及如何让网格正确动态更新/绑定(bind)?

public class SummaryItem
{
    public string ProcessName { get; set; }
    public long Total { get; set; }
    public long Average { get; set; }

    public static SummaryItem ObservableCollectionSearch(ObservableCollection<SummaryItem> oc, string procName)
    {
        foreach (var summaryItem in oc)
        {
            if (summaryItem.ProcessName == procName) return summaryItem;
        }
        return null;
    }
}

编辑 - 或者一个附加问题是在这种情况下 DataGrid 是否不是我应该用来可视化有效内存表的控件?也就是说,SummaryItem 的 observableCollection 实际上是内存表。

最佳答案

如果我没看错,您正在使用 ObservableCollection。如果您将项目添加到 ObservableCollection,这些更改应始终由 WPF 反射(reflect),但如果您编辑项目的属性(即更改 SummaryItem 的“Total”值),这不会更改 ObservableCollection,而是更改 SummaryItem。

要实现所需的行为,您的 SummaryItems 必须实现 INotifyPropertyChanged 接口(interface)以在属性更改时“通知”WPF:

// implement the interface
public event PropertyChangedEventHandler PropertyChanged;

// use this for every property
private long _Total;
public long Total {
    get {
        return _Total;
    }
    set {
        _Total = value;
        if(PropertyChanged != null) {
            // notifies wpf about the property change
            PropertyChanged(this, new PropertyChangedEventArgs("Total"));
        }
    }
}

关于c# - WPF DataGrid ItemsSource 绑定(bind)到 ObservableCollection 不会更新超出第一个设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818513/

相关文章:

wpf - Canvas 中路径的动画填充颜色

c# - 为什么我需要创建一个返回 DateTime.Now 而不是直接使用 DateTime.Now 的 DateTime 服务?

c# - 如何删除事件处理程序并将其重新附加到 C# 中的控件?

c# - 如何从IErrorHandler产生等效于HTTP 403的WCF消息?

.net - 如何在没有 .Net Framework 的情况下运行 C# Exe

c# - 将矩阵数组绑定(bind)到 WPF DataGrid

c# - WPF OpenFileDialog 与 MVVM 模式?

c# - 如何在 WPF 中绑定(bind) Ctrl 和数字键盘/(正斜杠)?

c# - 如何从键为复杂类型的字典中访问值?

托管在 Windows 服务中的 c# wcf 在 5 分钟后空闲