WPF 工具包 - 如何刷新图表

WPF Toolkit - how to refresh a chart

我刚刚使用 WPF 工具包创建了一个饼图。我想为 MS Dynamics NAV 创建一个插件。如果我在 NAV 中调用该方法:

    public void setChart(string chartKey, float chartValue)
    {
        KeyValuePair<string, float> value = new KeyValuePair<string, float>(chartKey, chartValue);
        values.Add(value);
    }

我的图表没有刷新。我的 ObservableCollection 正在更新,但未显示任何图表。如果我这样做

setChart("AB123",60);

它工作的构造函数。

如何更新图表。我还在构造函数中调用 pieChart.DataContext = values; 。如果我在 setChart 中再次调用它,它仍然不起作用。

Click me: Screenshot

您在初始化 windows 之后设置了 values,因为您的示例中的 values 没有实现 setter 和 INotifyPropertyChanged 方式,您的 UI 线程永远不会因您对 collection.

所做的更改而发出警告

使用INotifyPropertyChanged接口:

就像您设置项目时那样,您的 UI 线程知道 xaml 部分需要更改(我使用了 Window 但它可以是页面、用户控件或自定义 Class)

public partial class MainWindow : Window, INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    private ObservableCollection<KeyValuePair<string, float>> _values;
    public ObservableCollection<KeyValuePair<string, float>> values {
        get {
            if (_values == null) {
                _values = new ObservableCollection<KeyValuePair<string, float>>();
            }
            return _values;
        }
        set {
            _values = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(values)));
        }
    }

....

我在你的 xaml 中没有看到你的代码,也许这里也需要更改。

总结一下:
您需要使用 ObservableCollection<> 而不是 List<>。
ObservableCollection 会在其中发生更改时自动刷新。

public ObservableCollection<KeyValuePair<string, float>> values = new ObservableCollection<KeyValuePair<string, float>>();

这是我的。上面的答案是一样的,只是长了很多。也许在某些情况下你需要使用它。但在这种情况下,我看不到它有任何用处。不过谢谢!

问题是 Dynamics NAV(我使用的是 2016)。我想显示项目及其数量。问题是:由于某种原因,金额始终为 0。 WPF 工具包图表不显示任何值为 0 的图块。
但为什么是0?金额是小数 (C/AL),您需要 CALCFIELDS。所以我刚刚添加了 Rec.CALCFIELDS(field); 并且成功了!该值不再为 0!图表显示了我想要的。

也许我可以帮助遇到同样问题的人:)