WPF工具包 - 如何刷新图表

时间:2017-03-06 10:50:00

标签: c# wpf visual-studio wpftoolkit dynamics-nav

我刚刚使用WPF Toolkit创建了一个饼图。我想为MS Dynamics NAV创建一个AddIn。如果我在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

2 个答案:

答案 0 :(得分:0)

您在初始化Windows后设置values,并且由于示例中的values没有实现setter和INotifyPropertyChanged方式,因此您的UI线程永远不会被警告改变你的收藏品。

使用INotifyPropertyChanged界面:

当您设置项目时,您的UI线程知道在xaml部分中有更改要做(我使用了一个Window,但它可以是Page,UserControl或Custom 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中看到你的代码,也许这里也有变化。

答案 1 :(得分:0)

总结一下:
您需要使用ObservableCollection&lt;&gt;而不是List&lt;&gt;。如果内容发生了变化,ObservableCollection会自动刷新。

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

这是我的。上面的答案是一样的,只是更长的时间。也许在某些情况下你需要使用它。但在这种情况下,我没有看到任何使用它。但是,谢谢!

问题是动态资产净值(我使用2016年)。我想要显示项目金额。问题是:由于某种原因,金额总是为0。并且WPF工具包图表不显示值为0的任何图块 但为什么它是0?金额是小数(C / AL),您需要CALCFIELDS。所以我刚刚添加Rec.CALCFIELDS(field);并且它有效!价值不再是0!图表显示了我想要的东西。

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