[英]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.