所以我有一个可观察的集合,我正在更新,我可以看到值已经改变,但UI没有改变。这就是我所拥有的
public static class GeoLocations
{
public static ObservableCollection<Station> _locations = new ObservableCollection<Station>();
public static ObservableCollection<Station> locations
{
get { return _locations; }
set
{
_locations = value;
}
}
}
public class Station
{
public int StationNumber { get; set; }
// Bunch more properties here ...
}
然后我有一个类为另一个线程中的所有属性生成随机数。我知道它会改变它们,因为当我将鼠标悬停在图表中我正在使用的项目时,我会看到它正在更新。但是图表本身没有更新。假设第一个数字是1.6。然后更新到1.4 0.5 1.2 ...图表保持在1.6。
我正在使用的图表是Infragistics XamDataChart。我怀疑问题是我实现课程的方式。我有更多的UI需要更新而不仅仅是图表,所以我希望一旦我弄明白我可以在这里工作。
这是我的XamDataChart
的xaml<ig:XamDataChart Style="{StaticResource BarChartStyle}" Grid.Row="1" Grid.Column="1">
<ig:XamDataChart.Axes>
<ig:NumericYAxis x:Name="YAxis" MinimumValue="0" Interval="0.4" Label="{}{}" FontSize="8" MaximumValue="1.7" MajorStroke="#FF2C2C2C" Foreground="White" BorderBrush="White" FontWeight="Bold">
<ig:NumericYAxis.LabelSettings>
<ig:AxisLabelSettings Extent="23" Foreground="White"/>
</ig:NumericYAxis.LabelSettings>
</ig:NumericYAxis>
<ig:CategoryXAxis x:Name="XAxis"
ItemsSource="{Binding}"
Label="{}{IndexNum}"
Interval="1"
MajorStroke="Black"
Foreground="White"
BorderBrush="White"
DataContextChanged="CollectionChanged">
<ig:CategoryXAxis.LabelSettings>
<ig:AxisLabelSettings Extent="17" VerticalAlignment="Bottom" FontSize="11" Foreground="White"/>
</ig:CategoryXAxis.LabelSettings>
</ig:CategoryXAxis>
</ig:XamDataChart.Axes>
<ig:XamDataChart.Series>
<ig:ColumnSeries Style="{StaticResource ColumnSeriesStyle}" x:Name="Series1" ValueMemberPath="StationNumber " XAxis="{Binding ElementName=XAxis}" YAxis="{Binding ElementName=YAxis}" Brush="DodgerBlue" Outline="Black">
</ig:ColumnSeries>
</ig:XamDataChart.Series>
</ig:XamDataChart>
背后的代码
XAxis.ItemsSource = GeoLocations.locations;
Series1.ItemsSource = GeoLocations.locations;
答案 0 :(得分:3)
如果要在Station
个对象上更改属性,则需要在其上实施INotifyPropertyChanged
,然后在属性设置器中触发PropertyChanged
事件。当您的其他线程更改属性时,似乎没有通知图表对象。 ObservableCollection
只会在添加或删除Station对象时导致图表更新,而不会在其属性发生变化时进行更新。
你说当你将鼠标悬停在图表上时会看到更新的值,但这可能是因为图表实际上是在属性上调用getter来显示,所以你会在那里看到更新的值(但我是推测这个。)