WPF ListView编程方式取消选择项目

7

我已经采用了以下方法来绑定我的项目的IsSelected属性:WPF ListView程序化地选择项目

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

现在我可以通过简单地将IsSelected属性设置为true来在代码后台选择我的项目。 但是,我不能通过将我的项目的IsSelected属性设置为false来取消选择项目。
将项目属性IsSelected设置为true将触发ListViewSelectionChanged事件。 但是,将已选项目的IsSelected属性设置为false不会触发该事件。 属性将被更改为false,但项目仍在ListView中保持选定状态。 我还尝试使用Mode = TwoWay,但没有成功。
我将非常感激任何形式的帮助!
非常感谢您的帮助,
Thomas

将ListView重新绑定到数据源...或者您使用多选? - st_stefanov
这里有没有人知道我做错了什么? - Thomas Huber
你是在UI元素上更改IsSelected还是在绑定的数据上下文中更改?如果是在你的DataContext中,它是否实现了INotifyPropertyChanged接口?并且IsSelected是否引发了更改? - dowhilefor
还有输出窗口中是否有任何绑定异常?如果没有,请尝试使用扩展信息来设置Value="{Binding Path=IsSelected, diagnostics:PresentationTraceSources.TraceLevel=High}"。 - dvvrd
嗨。是的,我正在更改我的绑定数据上下文的值。并且INotifyPropertyChanged被触发了。(IsSelected = true)成功地选择了一个元素。使用TraceLevel=High,我能够确认它似乎像绑定工作一样。在代码中IsSelect = true会导致TransferValue - 使用最终值“True”,而在代码中IsSelect = false会导致TransferValue - 使用最终值“False”。然而,在视图中该项仍然被选中。 - Thomas Huber
3个回答

10

对于需要“以编程方式”取消选择 ListView 的 OP 或其他人员,如果您的 ListView 配置为 Single、Extended 或 Multiple,您可以随时执行以下操作:

YourlistView.Selecteditem = null;

5

或者您也可以使用这个:

YourlistView.UnselectAll();

我在WPF列表视图中使用了这个。我添加了MouseLeftButtonDown事件处理程序,并使用了您的代码来创建一个很棒的“单击任何位置取消选择”的感觉。谢谢! - Lars Passic

4
看起来您只是缺少样式的TargetType。根据Kent的原始代码,添加ListViewItem的目标类型即可。
<ListView.ItemContainerStyle>         
    <Style TargetType="ListViewItem">             
        <Setter Property="IsSelected" Value="{Binding IsGroovy}"/>               
    </Style>   
</ListView.ItemContainerStyle> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接