我遇到了在每行实现一个复选框的问题。发生的事情是,当我单击单个复选框时,它将选中/取消选中我的数据网格中的所有其他复选框。我认为可能正在发生的事情是我正在重新创建一个具有相同默认ID的复选框。也许。
这是我的xaml,以及我如何用问题列创建数据网格:
<DataGrid
ItemsSource="{Binding Pets, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedPet, Mode=TwoWay}"
AutoGenerateColumns="False"
HorizontalAlignment="Left"
BorderThickness="1"
CanUserAddRows="False"
CanUserDeleteRows="False"
RowHeaderWidth="0"
MinRowHeight = "25"
ColumnHeaderHeight="30"
HorizontalGridLinesBrush="Black"
VerticalGridLinesBrush="Black"
Foreground="Black"
CanUserSortColumns="True"
SelectionMode="Single"
RowStyle="{Binding Mode=OneWay, Source={StaticResource DefaultRowStyle}}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Selection" SortMemberPath="Station" MinWidth="20">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" >
<CheckBox IsChecked="{Binding Path=DataContext.IsPetChecked, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
<TextBlock Text="{Binding PetName, Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--MORE Columns below-->
</DataGrid.Columns>
</DataGrid>
在我的视图模型中,这就是我可观察的集合和复选框的方式
public bool IsPetChecked
{
get
{
return _isPetChecked;
}
set
{
if (_isPetChecked != value)
{
_isPetChecked = value;
RaisePropertyChanged(nameof(IsPetChecked));
}
}
}
private bool _isPetChecked = false;
/// <summary>
/// Stores the collection of pets
/// </summary>
public ObservableCollection<Pet> Pets
{
get
{
return _pets;
}
set
{
_pets = value;
RaisePropertyChanged(nameof(Pets));
}
}
private ObservableCollection<Pet> _pets = new ObservableCollection<Pet>();
当我单击复选框时,该属性被标记为已更改,但是我看到它选中了所有其他复选框。有人可以告诉我我在做什么错吗?预先非常感谢。
答案 0 :(得分:1)
您将所有CheckBoxes
绑定到相同的IsPetChecked
源属性。
如果您希望能够分别检查每行上的CheckBoxes
,则Pet
中的每个ItemsSource
对象应具有自己的IsPetChecked
(或{{1 }})属性,然后将其绑定,就像绑定到IsChecked
属性一样:
PetName