0

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);
                }
            }
        }
4

2 に答える 2

1

問題はリストを更新していると思います。更新は、クリックするよりも高速です。リストをクリアするのではなく、同期する必要があります。

于 2013-09-16T06:19:08.940 に答える