0

したがって、更新中の監視可能なコレクションがあり、値が変更されていることがわかりますが、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;
4

1 に答える 1

3

オブジェクトのプロパティが変更されている場合は、Stationオブジェクトに実装し、プロパティ セッターでイベントINotifyPropertyChangedを発生させる必要があります。PropertyChanged他のスレッドがプロパティを変更したときに、チャート オブジェクトに通知されていないようです。はObservableCollection、Station オブジェクトが追加または削除されたときにのみチャートを更新し、それらのプロパティが変更されたときは更新しません。

チャートにカーソルを合わせると更新された値が表示されると言いますが、これは、チャートが実際にプロパティのゲッターを呼び出してそれを表示しているためである可能性があるため、そこに更新された値が表示されます (しかし、私はこれについて推測しています) )。

于 2013-06-30T17:45:25.817 に答える