Поскольку у вас уже есть свойство Enabled
, связанное с вашим CheckBox
, вы можете использовать его, чтобы связать его со свойством IsEnabled
вашего TextBox
.Ваше связывание CheckBox
должно иметь UpdateSourceTrigger
значение PropertyChanged
Рабочий образец ниже,
XAML
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Enable">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Group">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Group}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Group}" IsEnabled="{Binding Path=Enabled, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Модель
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _enabled;
private string _group;
public bool Enabled
{
get => _enabled; set
{
_enabled = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Enabled)));
}
}
public string Group
{
get { return _group; }
set
{
_group = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Group)));
}
}
}
ViewModel
public class ViewModel
{
public ObservableCollection<Model> Items { get; set; }
public ViewModel()
{
Items = new ObservableCollection<Model>
{
{new Model{ Enabled = true, Group = "Group1"} },
{new Model{ Enabled = false, Group = "Group2"} },
{new Model{ Enabled = false, Group = "Group3"} },
{new Model{ Enabled = true, Group = "Group4"} },
{new Model{ Enabled = false, Group = "Group5"} },
{new Model{ Enabled = false, Group = "Group6"} }
};
}
}