Команда флажка wpf bind внутри DataGridTemplateColumn.CellTemplate

Это было несколько раз с разными вариациями, но я не могу заставить их работать.

Я пытаюсь получить метод, вызываемый в моей модели представления, когда в моем представлении нажата кнопка-флажок (в 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>

и, на мой взгляд, модель

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
}

2 ответа

Решение

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

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

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

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