【问题标题】:WPF Toolkit - how to refresh a chartWPF Toolkit - 如何刷新图表
【发布时间】:2017-03-06 10:50:00
【问题描述】:

我刚刚使用 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

【问题讨论】:

  • 我可以看看你的ObservableCollection吗?
  • public ObservableCollection&lt;KeyValuePair&lt;string, float&gt;&gt; values = new ObservableCollection&lt;KeyValuePair&lt;string, float&gt;&gt;();

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


【解决方案1】:

您在初始化窗口后设置了values,并且由于您的示例中的values 没有实现setter 和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 中看到您的代码,也许这里也需要进行更改。

【讨论】:

  • 谢谢。但是我在调​​试时遇到了一个小错误。 System.NullReferenceException 和 ist 告诉我“对象引用未设置为对象实例。”
  • 现在它可以正常工作了。但这并没有解决我的问题。代码正在运行,问题是在 MS Navision 中设置的。 NAV 中的问题:Record.CALCFIELDS(field) 丢失。 - 无论如何谢谢;)
【解决方案2】:

好总结一下:
您需要使用 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!图表向我展示了我想要的。

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

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 2016-07-24
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多