DataGrid
에 ToggleButton
이 포함 된 열을 만들려고합니다. 단추의 IsChecked
속성은 내 데이터 항목 (INotifyPropertyChanged
구현)에 IsSelected
이라는 속성에 바인딩됩니다.WPF 바인딩 쿼리 - 데이터 대화 상자의 토글 버튼
버튼을 클릭 할 때 처음 시도가 IsSelected
을 업데이트하지 못했습니다. 다른 곳에서 값을 올바르게 표시 했는데도 내 시도가 실패했습니다.
상대 사용하여 바인딩
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:DataItem}">
<ToggleButton IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
또는의 UpdateSourceTrigger
속성을 설정
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:DataItem}">
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}, Path=DataContext.IsSelected}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
내 질문은 바인딩 :
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:DataItem}">
<ToggleButton IsChecked="{Binding IsSelected}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
는 stackexchange 주변 검색, 나는 몇 가지 해결책을 발견 왜 직접 바인딩을 사용하려면 명시 적으로 0123을 설정해야합니까?, 상대적인 바인딩 방법은 그렇지 않지만?
내가 직접 바인딩의 경우 제대로 작동하려면 UpdateSourceTrigger =하여 PropertyChanged을 필요로 완전히 이유를 이해합니다. 그러나 귀하의 대답은 내 질문의 요점을 설명하지 않습니다 - 왜 RelativeSource를 사용하는 바인딩은 동일한 바인딩 매개 변수가 지정 될 필요가 없습니다. – Peregrine
두 번째 예제에서는 DataGridCell의 속성에 바인딩되지만 기본 데이터 객체의 속성에는 직접 바인딩하지 않습니다. – mm8