ListViewItem.IsSelected上的WPF DataTrigger
我有一个ListView,样式如下:ListViewItem.IsSelected上的WPF DataTrigger,wpf,xaml,listview,triggers,Wpf,Xaml,Listview,Triggers,我有一个ListView,样式如下: <ListView.View> <GridView> <GridViewColumn Header="Reset" Width="60"> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{B
<ListView.View>
<GridView>
<GridViewColumn Header="Reset" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding ResetThisItem}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
在ViewModel类中,我有属性“ResetThisItem”
当用户选择ListView的完整行时,我希望将此属性设置为true。如果取消选择该项,则不会发生任何事情
我知道这里需要DataTriggers,但我不知道在哪里,因为我不知道在哪里可以访问ListViewItem.IsSelected和我的ViewModel.ResetThisItem,以及如何在xaml中绑定它们
任何提示,不胜感激。
谢谢
这可能是实现你所追求的目标的最简单的方法。如果您喜欢代码方法或其他角度,请告诉我。我希望这有帮助。:) 不是100%确定,所以一条注释就足够了:为listview创建一个新的ItemContainerStyle,但不要覆盖模板,这样您就可以访问ViewModel和ListViewItem了。@DoHileFor:我就是这么做的,但是我没有从DataTrigger的Setter中找出如何与ViewModel关联……请记住,绑定始终与DataContext关联,如果将视图模型设置为DataContext,那么应该不会有问题。因此,DataTrigger将自动引用ViewModel。但是,如果通过将另一个对象指定为DataContext来覆盖该行为,则需要另一种方法。所以我不涉及数据上下文。但是我想换一种方式,你可以在你的容器样式中使用一个非常简单的setter。但我可能会完全改变这种方法,并为此使用命令。如果选择了图元,将触发一个命令,该命令将在视图模型中处理。我永远不会使用属性来触发操作,就像您的ResetThisItem听起来一样。一个属性应该是一个状态,而不是仅仅为了触发某个东西的临时动作。但是我希望当用户取消选择某个项目时,仍然选中stillbox。
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding ResetThisItem, Mode=OneWayToSource}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Reset" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding ResetThisItem}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>