WPF工具包 - 如何刷新图表(WPF Toolkit - how to refresh a cha

2019-09-28 06:37发布

我刚刚创建了一个饼图与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再次调用它,它仍然无法正常工作。

点击我:截图

Answer 1:

您设置values初始化你的窗口后,因为values在你的例子不实现调节器和INotifyPropertyChanged方式,你的UI线程永远不会通过您在收集所做的更改警告。

使用INotifyPropertyChanged界面:

就像当你设置你的项目,你的UI线程知道有一个变化在XAML部分做(我参加了一个窗口,但它可以是一个网页,一个用户控件或自定义类)

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代码可能有变化也在这里做。



Answer 2:

好了总结:
你需要使用一个的ObservableCollection <>而不是一个列表<>。
在全自动的ObservableCollection刷新,如果有东西在里面改变。

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

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

问题是动态NAV(我使用的是2016)。 我想表明其量项目。 问题是:量始终是0出于某种原因。 和WPF工具包图表不值为0显示任何瓷砖。
但为什么它是0? 量是一个小数(C / AL),你需要CALCFIELDS。 于是我就加入Rec.CALCFIELDS(field); 和它的工作! 该值不再是0! 而图表显示了我我想要的东西。

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



文章来源: WPF Toolkit - how to refresh a chart