我有一个包含复选框列的数据网格。我通过使用多选复选框一次检查所有行,对该表单进行了修改。它奏效了。但是当应用程序运行时,我无法从该复选框列中获取值,因为我不确定如何访问数据列。任何人都可以帮助我获得复选框值(true / false)。 这就是我到目前为止所做的。
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path= Id}" Header="Id" Visibility="Hidden"/>
<DataGridTextColumn Binding="{Binding Path= Category}" Header="Category" Width="320"/>
<!--<DataGridCheckBoxColumn Binding="{Binding Path= Check}" Width="*"/>-->
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox x:Name="headerCheckBox" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkSelectAll" HorizontalAlignment="Center" IsChecked="{Binding IsChecked, ElementName=headerCheckBox, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
代码:C#
for (int i = 0; i < datagridview.Items.Count; i++)
{
ÇategoryData CD = (ÇategoryData)datagridview.Items[i];
if (CD.Check == true)
{
//it always returns false even checked
}
}
答案 0 :(得分:1)
首先,我没有看到该值会用于什么?我的意思是,复选框就像一个UI机制来选择或取消选择所有其他框。但即使你确实需要这个值,为什么不将它绑定到ViewModel属性呢?
像这样:
<CheckBox x:Name="headerCheckBox" Value="{Binding SelectAllCheckboxInTheViewModel}" />
答案 1 :(得分:0)
在我看来,这里有很多奇怪的事情。 我真的不知道为什么你的行&#39;复选框被称为&#34; chkSelectAll&#34; 我建议你尝试获得以下内容:每个Checkbox都可以自己检查,UnChecked。当您点击Headers Checkbox时,所有Columns Checkbox都会获得相同的状态(如果未选中至少一个,则选中,如果选中了所有行复选框,则选中Unchecked)。
如果这是对的,那么你应该做以下事情: 正如Siderite Zackwehdex所提到的那样(我的意思是),你应该将Checkbox IsChecked Value绑定到Row的基础ViewModel的属性。
比你的Headers Checkbox也应该绑定到Viewmodel的一个Property,它包含Observable Collection,如下所示:
public bool AllSelected
{
get { return !this.MyCollection.Any(item => !item.IsSelected); }
set
{
var toggle = this.MyCollection.Any(item => !item.IsSelected);
foreach (var itm in this.MyCollection.Where(item => item.IsSelected != toggle))
itm.IsSelected = toggle;
}
}
集合项的IsSelected-Property-Setter-ViewModel必须通知ParentViewModel(它拥有Collection)一个IsSelected / IsChecked(但是你要调用它)状态已经改变。因此PropertyName的PropertyChanged事件&#34; AllSelected&#34;将被提出。
Collection Items ViewModel Property可能如下所示:
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
RaisePropertyChanged("IsSelected");
ParentViewModel.RaisePropertyChanged("IsSelected");
}
}
两个CheckBoxes(标题模板中的一个和CellTemplate中的一个)都与Mode=Twoway
绑定