我有这个:
<ListView Name="UserSolutionsGrid">
<ListView.View>
<GridView>
<GridViewColumn Header="">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding IsSelected}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="350" DisplayMemberBinding="{Binding Name}" Header="Solution" />
</GridView>
</ListView.View>
</ListView>
我想要做的是通过单击行来切换复选框,无论是复选框本身还是名称。
不确定如何继续,我是否需要将鼠标事件连接到gridview并找到所选的行,然后找到该复选框并切换它?
答案 0 :(得分:1)
这对你有用。你需要做的是使用RelativeSource将你的checkBox属性绑定到ListViewItem的IsSelected属性 -
<ListView Name="UserSolutionsGrid">
<ListView.View>
<GridView>
<GridViewColumn Header="">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="350" DisplayMemberBinding="{Binding Name}" Header="Solution" />
</GridView>
</ListView.View>
</ListView>
答案 1 :(得分:0)
由于您提到这是多选,并且您希望能够切换等,我会按照您最初的建议使用鼠标事件。
这会使切换代码更容易一些。虽然如果使用数据绑定,则无需找到行并切换复选框,只需设置复选框绑定的值,然后引发OnPropertyChanged()。
那个网格视图是否只有两列?我认为只要在listview中使用项目模板,你就可以在没有网格的情况下获得相同的结果。