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!图表显示了我想要的。
也许我可以帮助遇到同样问题的人:)
我刚刚使用 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!图表显示了我想要的。
也许我可以帮助遇到同样问题的人:)