Pet*_*rus 11 wpf listview selectionchanged
我有一个ListView绑定ItemsSource.为什么SelectionChanged事件在load/databound事件上触发?我认为这是因为选择了'默认'项目,即索引0.
如何禁用此功能,因为选择项目时会更新其他数据源.
谢谢Petrus
如果仅设置ItemsSource属性,则listView不应触发SelectionChange。但是,如果将SelectedIndex属性绑定到dataContext对象的属性,则所选内容将移动到由binded属性指定的索引。
当页面加载时,这不会触发Selector_OnSelectionChanged事件:
<ListView SelectionChanged="Selector_OnSelectionChanged"
ItemsSource="{Binding Path=Items}"
></ListView>
Run Code Online (Sandbox Code Playgroud)
但是这样做:
<ListView SelectionChanged="Selector_OnSelectionChanged"
SelectedIndex="{Binding Path=SelectedIndexValue}"
ItemsSource="{Binding Path=Items}"
></ListView>
Run Code Online (Sandbox Code Playgroud)
因为通过绑定将SelectedIndex设置为SelecteIndexValue。
为了避免这种情况,并且仍将绑定保留在标记中,请在绑定之前(在表单构造函数中调用InitializeComponent()之前)将dataContext对象的SelectedIndexValue设置为-1。
希望这可以帮助。
感谢您的回复。
当我在 SelectionChanged 事件上放置断点时,它会在屏幕完全加载之前中断进程。您还将看到列表中的第一行随后被“选中”。正如您在代码中看到的那样,我没有绑定到 SelectedIndexValue。列表的 DataContext 是 ReadonlyCollection
在我的 SelectionChanged 事件中,如您所见,我通知其他对象加载与所选项目相关的数据。我只希望在选择一个而不是设置默认值时发生这种情况。我必须使用这些代表类似数据的 ListView,但在加载时都必须选择一个项目。
我注意到列表视图的属性窗口中的默认选定索引设置为 -1。我什至可以在 List_Loaded 事件上设置此代码,但那时第一个 SelectionChanged 已经发生了。
<ListView PreviewMouseDown="ActiveCasesView_MouseDown" x:Name="ActiveCasesView"
DataContext="{StaticResource ActiveCasesViewSource}"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource CasesItemTemplate}"
SelectionMode="Single"
SelectionChanged="ActiveCasesView_SelectionChanged"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto" >
</ListView>
private void ActiveCasesView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (mouseClicked)
if (e.AddedItems.Count > 0)
App.Messenger.NotifyColleagues(App.MSG_SELECT_ACTIVE_CASE, ((CaseViewModel)ActiveCasesView.SelectedItem).CaseNumber);
}
Run Code Online (Sandbox Code Playgroud)
我添加了 PreviewMouseDown 来设置一个指示器,指示我已单击 SelectionChanged 事件中的列表视图。这确实有帮助,但我不相信这是最好的解决方案。
谢谢帕特鲁斯
| 归档时间: |
|
| 查看次数: |
42199 次 |
| 最近记录: |