我刚刚创建了一个饼图与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再次调用它,它仍然无法正常工作。
点击我:截图
您设置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代码可能有变化也在这里做。
好了总结:
你需要使用一个的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! 而图表显示了我我想要的东西。
也许我可以帮助别人同样的问题:)