我有一个列表框,其中的项目是复选框。滚动列表框时,我发现Checked和Unchecked事件正在为项目触发,因为它们滚动到视图或滚出视图。
这似乎与本文讨论的内容有关:
Silverlight 3 Checkbox Listbox bug when scrolling?
我遇到的问题是事件被触发,因为我发生这种情况时我正在更新服务器上的数据。当我只希望在用户更改复选框的状态时发生这种情况时,我得到了所有这些虚假的服务器通信。
滚动时是否有某种方法可以阻止此事件触发?
答案 0 :(得分:2)
当我只想在用户更改复选框的状态时发生这种情况时,我得到所有这些虚假的服务器通信。
我认为Checked
和Unchecked
事件不适合您的目的。它们的设计确实会影响视觉状态。相反,您应该将列出的项目对象上的布尔属性绑定到Checkbox的IsChecked
属性。然后,项目对象中的setter中的代码可以启动服务器内容(对于皮带和大括号,它可以将当前值与传入值进行比较)。
要回答您的问题,您可以尝试在模板中为列表框的StackPanel
属性指定普通的旧ItemsPanel
。虽然如果你有很多条目,这可能不是一个选择。
答案 1 :(得分:1)
ListBox的默认ItemsPanel是VirtualizingStackPanel。您可以将其更改为使用StackPanel,这样您的问题就解决了。 使用此代码:
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
<ListBox.ItemsPanel>