WPF の専門家に非常に簡単な質問があります。
XAML コードから始めます。
<ListView Name="ListViewRunner" ItemsSource="{Binding Path=CurrentPrices}" >
<GridView>
<!-- Many GridViewColumn that display values -->
<GridViewColumn Header="Chart" Width="70" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Name="btnDisplayChart" Content="Chart"
Click="DisplayChart_Click"
Tag="{Binding ID}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</Listview>
CurrentPrices は非同期の ObservableCollection であり、別のスレッドが 200 ミリ秒ごとに他の列を更新します。上記で定義したボタンをクリックしても (ボタンをクリックしなかったように) 何も起こらないように見えますが、他のスレッドのスリープ時間 (つまり 2000 ミリ秒) を増やすと、コード ビハインドはイベントを正しく処理します。
正しい方向を教えてください。
コレクションを更新するコードは次のとおりです
private void getRemotePrices(){
while(update)
{
lock (boccaciccio)
{
MarketPrices marketprices = bf.GetMarketPrices(market.ID);
market.UpdateMarketPrices(marketprices);
lastPrices.Clear();
foreach (var runnerprice in market.ADATA)
{
lastPrices.Add(runnerprice);
}
notifyObservers(lastPrices); //updates every subscriber
Thread.Sleep(200);
}
}
}