I would like to gray out and disable specific rows in datagrid. All rows which have the bool flag IsEnabled set to false should be grayed out and disabled for editing. How can I achieve that?
Below you can find my Example Code:
MainWindow.xaml
<Window x:Class="WpfApplicationDisableRows.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplicationDisableRows"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
</Window.Resources>
<StackPanel>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Width="500" Height="250">
<DataGrid.Columns>
<DataGridTextColumn FontWeight="Bold" IsReadOnly="True" Width="200" Header="Description" Binding="{Binding Path=Description}"></DataGridTextColumn>
<DataGridTextColumn FontWeight="Bold" Width="200" Header="Value" Binding="{Binding Path=Value}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfApplicationDisableRows
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
ObservableCollection<Row> Rows;
public MainWindow()
{
Rows = new ObservableCollection<Row>();
AddRows();
InitializeComponent();
this.DataContext = Rows;
}
public void AddRows()
{
Rows.Add(new Row { Description = "Row1", Value = "A", IsEnabled = true });
Rows.Add(new Row { Description = "Row2", Value = "B", IsEnabled = false });
Rows.Add(new Row { Description = "Row3", Value = "C", IsEnabled = true });
}
}
}
Row.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfApplicationDisableRows
{
public class Row : INotifyPropertyChanged
{
private bool _IsEnabled;
public event PropertyChangedEventHandler PropertyChanged;
public string Description { get; set; }
public string Value { get; set; }
public bool IsEnabled
{
get
{
return _IsEnabled;
}
set
{
_IsEnabled = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsEnabled"));
}
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
}
Row2 should be grayed out and disabled for editing because IsEnabled is false
Description = "Row2", Value = "B", IsEnabled = false
Row1 and Row3 have the flag IsEnabled=true, these rows should be editable.
Description = "Row1", Value = "A", IsEnabled = true
Description = "Row3", Value = "C", IsEnabled = true