【发布时间】:2011-08-23 14:00:42
【问题描述】:
我有一个包含多个 GridViewColumns 的 ListView。有几列是复选框。每个列标题也包含一个复选框,目的是选中/取消选中该列中的所有复选框。每行的复选框都绑定到我的视图模型中的属性。我看过几个帖子,其中场景是一列复选框,但这些解决方案都不适合我,因为我有 4 列复选框。我还需要将选择的状态从一次访问持续到下一次访问(可以检查列中的所有、部分或没有复选框)。
这是我的 ListView 的 XAML 的缩写版本:
<ListView ItemsSource="{Binding AveragingParameters}">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn Header="Parameter">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding Name}" />
</DockPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<CheckBox x:Name="chkAvg" IsChecked="{Binding CalcAverage}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
<Grid>
<CheckBox x:Name="chkAvgSelectAll" Content="Avg" ToolTip="Select All" />
</Grid>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<CheckBox x:Name="chkMin" IsChecked="{Binding CalMin}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
<Grid>
<CheckBox x:Name="chkMinSelectAll" Content="Min" ToolTip="Select All" />
</Grid>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我已经尝试在 Checked 属性上使用命令和命令参数、PropertyChanged 事件,并在后面的代码中处理 Checked 事件,但没有任何信息可以让我知道要在绑定的集合中更改什么。
我想我可以为每个单独的事件处理程序创建一个单独的事件处理程序,但如果可能的话,我希望能够在单个事件处理程序中处理它,因为最终我将创建一个在显示的列的术语。
提前致谢
【问题讨论】:
-
当用户选中或取消选中
chkAvgSelectAll或chkMinSelectAll时,您想知道您需要在AveragingParameters中进行哪些更改吗? -
我试图弄清楚如何链接到我的视图模型并确定我需要对我的 AveragingParameters 集合中的每个项目产生影响的布尔属性。 H.B. 下面的帖子可能就是门票。
-
我不确定我是否理解问题所在。如果您将每一列绑定到 ModelView 中的单个属性/字段,那么当该复选框状态更改时,您的底层绑定对象也会更改。不需要确定哪个布尔属性,它通过绑定是显式的。也许我不明白这个问题。
-
@SRM,也许我遗漏了一些东西,但是我的模型的状态正在保持,我需要在后续访问时保留网格中每个项目的布尔值(抱歉没有提及在我的原始帖子中。)似乎您的解决方案会打破这一点。这就是为什么我不能使用触发器。仅供参考,我确实使用多重绑定解决了我的问题,解决方案将很快发布。