DataGrid
にToggleButton
を含む列を作成しようとしています。ボタンのIsChecked
プロパティは、データ項目(INotifyPropertyChanged
を実装)のIsSelected
というプロパティにバインドされています。WPFバインディングクエリ - データグリッドのトグルボタン
ボタンをクリックしたときに初めてIsSelected
を更新できませんでしたが、別の場所に設定しても値が正しく表示されました。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:DataItem}">
<ToggleButton IsChecked="{Binding IsSelected}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
はstackexchange周りを検索、私はソリューションのカップルが見つかりました:
は結合
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:DataItem}">
<ToggleButton IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
か私の質問があり、相対結合
<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>
を使用してのUpdateSourceTrigger
プロパティを設定しますなぜ直接バインディングを使用するには明示的に0123を設定する必要があるのですかであるが、相対的な結合方法はそうではない。
直接結合する場合は、正常に動作するUpdateSourceTrigger =にPropertyChangedを必要とする理由を私は完全に理解しています。しかし、あなたの答えは私の質問の要点には対処しません。なぜRelativeSourceを使ったバインディングで同じバインディングパラメータを指定する必要がないのですか? – Peregrine
2番目の例では、DataGridCellのプロパティにバインドしており、基になるデータオブジェクトのプロパティには直接バインドしません。 – mm8