繁体   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