簡體   English   中英

ListView中的WPF按鈕未觸發

[英]WPF Button inside ListView not firing

對於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,一個單獨的線程每200ms更新一次其他列。 現在,當我單擊上面定義的按鈕時,似乎沒有發生任何事情(就像我沒有點擊按鈕),但是如果我增加另一個線程的休眠時間(即2000ms),則后面的代碼會正確處理事件。

你能指點我正確的方向嗎?

這是更新集合的代碼

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

我認為問題是刷新清單。 更新速度比您單擊更快。 您不應該清除列表,而是同步它。

單擊按鈕包括鼠標按下然后鼠標按下活動。 當鼠標位於同一個按鈕實例上方時,兩個活動都應該完成。 當您快速刷新GridView中的項目時,您的鼠標按下活動發生在一個按鈕實例上,然后刷新列表並且鼠標下的按鈕實例被其他按鈕實例替換,因此在其他按鈕實例上完成鼠標按下活動。

就像在鼠標按下一個按鈕時按下鼠標按鈕一樣,然后將鼠標移動到其他按鈕,然后釋放鼠標按鈕。 不會觸發任何點擊事件。

您可以將click事件更改為鼠標按下或鼠標按下事件並確保觸發,但我不確定從設計的角度來看它是否是正確的解決方案。 如果您需要設計建議,您應該提供更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM