【问题标题】:WPF ListView programmatically deselect itemWPF ListView 以编程方式取消选择项目
【发布时间】:2012-08-13 14:44:37
【问题描述】:

我使用以下方法将我的项目的 IsSelected 绑定到属性:WPF ListView Programmatically Select Item

<ListView.ItemContainerStyle>
    <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</ListView.ItemContainerStyle>

现在我可以通过简单地将 IsSelected 属性设置为 true 来在代码中选择我的项目。但是,我无法通过将项目的 IsSelected 属性设置为 false 来取消选择项目。

将项目属性 IsSelected 设置为 true 将触发 ListViewSelectionChanged 事件。但是,将已选择项目的 IsSelected 属性设置为 false 不会触发事件。该属性将更改为 false,但该项目在 ListView 中仍处于选中状态。我也尝试过使用 Mode=TwoWay 没有任何成功。

我将不胜感激任何形式的帮助!

非常感谢您,

托马斯

【问题讨论】:

  • 再次将ListView绑定到数据源...或者你使用多选?
  • 没人知道我在这里做错了什么吗?
  • 您是在 ui 元素上还是在绑定的数据上下文上更改 IsSelected?如果是您的 DataContext,它是否实现了 INotifyPropertyChanged? IsSelected 是否引发了变化?
  • 输出窗口中还有绑定异常吗?如果没有,请尝试通过设置 Value="{Binding Path=IsSelected, diagnostics:PresentationTraceSources.TraceLevel=High}" 使用有关绑定的扩展信息
  • 嗨。是的,我正在更改绑定数据上下文的值。并引发了 INotifyPropertyChanged。 (IsSelected = true) 成功选择一个元素。使用 TraceLevel=High 我能够确认绑定似乎有效。代码中的 IsSelect = true 会导致 TransferValue - 使用最终值“True”,代码中的 IsSelect = false 会导致 TransferValue - 使用最终值“False”。但是在视图中,该项目仍处于选中状态。

标签: c# listview data-binding selection


【解决方案1】:

对于希望“以编程方式”取消选择 ListView 的 OP 或其他人。 如果您的 ListView 设置为 Single、Extended 或 Multiple,您总是可以:

YourlistView.Selecteditem = null;

【讨论】:

    【解决方案2】:

    看起来您只是缺少样式的TargetType。根据下面肯特的原始代码添加目标类型ListViewItem

    <ListView.ItemContainerStyle>         
        <Style TargetType="ListViewItem">             
            <Setter Property="IsSelected" Value="{Binding IsGroovy}"/>               
        </Style>   
    </ListView.ItemContainerStyle> 
    

    【讨论】:

      【解决方案3】:

      或者你也可以使用它:

      YourlistView.UnselectAll();
      

      【讨论】:

      • 我将它用于 WPF 列表视图。我添加了 MouseLeftButtonDown 事件处理程序并使用您的代码创建了一个很棒的“单击任意位置以取消选择”的感觉。谢谢!
      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2013-12-25
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多