选中复选框时更改 wpf 数据网格行背景颜色
Change wpf data grid row background color when checkbox is checked
我正在尝试在选中给定行的复选框时更改我的数据网格行的颜色,而在未选中时它应该将值重置为前一个。
我正在使用 MVVM 来实现上述功能。
我的 XAML 代码:-
<Window.Resources>
<Style x:Key="RowStyle" TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<DataGrid Name="lbUsers" ItemsSource="{Binding Data}" CanUserAddRows="False" Grid.Column="1" Grid.Row="1" SelectedIndex="{Binding SelectionIndexChange, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Width="45" Height="20" Command="{Binding ElementName=lbUsers,Path=DataContext.IsChecked}" ></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
下面是视图模型代码:
public ViewModel ()
{
Data = new ObservableCollection<CommonData>
{
};
}
private ObservableCollection<CommonData> _data;
public ObservableCollection<CommonData> Data
{
get
{
if (_data == null)
{
_data = new ObservableCollection<CommonData>()
{
};
}
return _data;
}
set
{
if (value != this._data)
{
this._data = value;
NotifyPropertyChanged("Data");
}
}
}
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set { this._isChecked = value; NotifyPropertyChanged("IsChecked"); }
}
请告诉我我做错了什么才能让给定的功能正常工作。
在此先感谢,如果缺少信息,请告诉我。
几件事:
您已将 x:Key
分配给样式,但未在 DataGrid
上使用它。删除键使其成为所有 DataGridRow
的默认样式,或将其添加到网格:
RowStyle="{StaticResource RowStyle}"
在 DataTrigger
绑定中,您还需要添加
ElementName=lbUsers
此外,您的 Checkbox
未正确绑定 -- 这不是通过 Command
完成的。您将需要更改
Command={Binding...
到
IsChecked={Binding...
我正在尝试在选中给定行的复选框时更改我的数据网格行的颜色,而在未选中时它应该将值重置为前一个。
我正在使用 MVVM 来实现上述功能。
我的 XAML 代码:-
<Window.Resources>
<Style x:Key="RowStyle" TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<DataGrid Name="lbUsers" ItemsSource="{Binding Data}" CanUserAddRows="False" Grid.Column="1" Grid.Row="1" SelectedIndex="{Binding SelectionIndexChange, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Width="45" Height="20" Command="{Binding ElementName=lbUsers,Path=DataContext.IsChecked}" ></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
下面是视图模型代码:
public ViewModel ()
{
Data = new ObservableCollection<CommonData>
{
};
}
private ObservableCollection<CommonData> _data;
public ObservableCollection<CommonData> Data
{
get
{
if (_data == null)
{
_data = new ObservableCollection<CommonData>()
{
};
}
return _data;
}
set
{
if (value != this._data)
{
this._data = value;
NotifyPropertyChanged("Data");
}
}
}
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set { this._isChecked = value; NotifyPropertyChanged("IsChecked"); }
}
请告诉我我做错了什么才能让给定的功能正常工作。
在此先感谢,如果缺少信息,请告诉我。
几件事:
您已将 x:Key
分配给样式,但未在 DataGrid
上使用它。删除键使其成为所有 DataGridRow
的默认样式,或将其添加到网格:
RowStyle="{StaticResource RowStyle}"
在 DataTrigger
绑定中,您还需要添加
ElementName=lbUsers
此外,您的 Checkbox
未正确绑定 -- 这不是通过 Command
完成的。您将需要更改
Command={Binding...
到
IsChecked={Binding...