2

Это задавали несколько раз с различными вариантами, но я не могу заставить их работать.wpf bind checkbox command внутри DataGridTemplateColumn.CellTemplate

Я пытаюсь получить метод, называемый в моем ViewModel, когда флажок (в datagridTemplateColumn.cellTemplate) нажата, на мой взгляд

<DataGrid ItemsSource="{Binding TransactionTypes}" AutoGenerateColumns="False" CanUserAddRows="False" x:Name="TransTypesGrid"> 
<DataGrid.Columns> 
    <DataGridTemplateColumn> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
          Command="{Binding DataContext.UpdateCommand, ElementName=TransTypesGrid}" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
    <DataGridTextColumn Header="Transaction Type" Binding="{Binding TransTypeDesc}" /> 
</DataGrid.Columns> 

и в моем ViewModel

public DelegateCommand UpdateCommand { get; set; } 

public myConstructor() 
{  
    this.UpdateCommand = new DelegateCommand(Update); 
} 

private void Update() 
{ 
    //this stuff works, it's just not getting called when a checkbox get's (un)checked 
    //stuff that goes though the DataGrid's item source's IsSelected property 
} 

ответ

4

Вы должны использовать привязку Self в вашей команде.

<DataTemplate> 
    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     Command="{Binding DataContext.UpdateCommand,RelativeSource={RelativeSource Mode=Self}}" /> 
</DataTemplate> 
2

Этот код работает, если IsSelected в модели и команде в ViewModel.

<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
Command="{Binding 
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, 
Path=DataContext.UpdateCommand}"/> 
Смежные вопросы