DataGrid의 ItemsSource에 컬렉션이 이미 바인딩 되어있을 때, 컬렉션에 포함된 내용 외에 DataGrid의 컬럼에 이벤트를 걸기 위한 Command를 ViewModel에서 찾아 호출하는 방법 찾기
1. 위와 같은 화면이 있다고 했을 때 관리자Y/N 컬럼에 CheckBox를 보이게 하고싶다. DataGridCheckBoxColumn을 사용하면 되지만 CheckBox가 Checked될 때 이벤트를 걸기 위해 DataGridTemplateColumn으로 CheckBox를 만들어주고 Behavior
를 작성하여 Command를 Binding 하려고 하는데 목록에 만들어준 Command가 보이지 않는다.
이유는 아마 DataGrid의 ItemsSource로 ObservableCollection을 바인딩 해둬서 그런 것 같다. 바인딩한 컬렉션의 내용물 외에는 바인딩 목록에 나오지 않는 것이다.
<DataGrid x:Name="ExcelData" ItemsSource="{Binding excelContentsList}" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="이름" Binding="{Binding NAME}"/>
<DataGridTextColumn Header="품목" Binding="{Binding MANUFACTURER}"/>
<DataGridTextColumn Header="제조사" Binding="{Binding NUMBER}"/>
<DataGridTextColumn Header="날짜" Binding="{Binding INCOMING_DATE}"/>
<DataGridTemplateColumn Header="관리자Y/N">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding }"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
AncestorType을 컨트롤이 아닌 뷰모델로 설정할 수도 있군요. 비주얼 트리에서 뷰모델을 가지고 있을 법한 컨트롤의 DataContext를 참조해서 썼는데 훨씬 직관적인 것 같습니다. 잘 보고 가요!