Двусторонняя привязка ContentControl в DataTemplate не работает?

Я настроил повторно используемый шаблон данных "DataGridCheckBoxEdit" для столбца сетки данных. Привязка к нему одним способом работает как шарм через ContentControl. Связывание напрямую работает в двух направлениях правильно. Однако двусторонняя привязка внутри этого DataTemplate из ContentControl просто не будет работать.

Вот фрагменты:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=IsMadeAvailable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentTemplate="{StaticResource     DataGridCheckBoxEdit}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

и повторно используемый шаблон:

<DataTemplate x:Key="DataGridCheckBoxEdit">
<CheckBox Name="CheckBoxControl" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl}, Path=DataContext.Content, Mode=TwoWay, BindsDirectlyToSource=True, UpdateSourceTrigger=PropertyChanged}" Margin="8,4,2,2" />
<DataTemplate.Triggers>
<Trigger SourceName="CheckBoxControl" Property="IsVisible" Value="True">
<Setter TargetName="CheckBoxControl" Property="FocusManager.FocusedElement" Value="{Binding ElementName=CheckBoxControl}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>

Как я уже сказал, односторонняя привязка работает как шарм... но возврат данных к свойству не работает.

Конечно, поставив его без возможности повторного использования:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox Name="GasIsAvailableCheckBox" IsChecked="{Binding Path=IsMadeAvailable, UpdateSourceTrigger=PropertyChanged}" Margin="8,4,2,2" />
<DataTemplate.Triggers>
<Trigger SourceName="GasIsAvailableCheckBox" Property="IsVisible" Value="True">
<Setter TargetName="GasIsAvailableCheckBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=GasIsAvailableCheckBox}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

также прекрасно работает и работает в двух направлениях.

Что я делаю неправильно?

Спасибо!

Владан


person Vladan Strigo    schedule 25.09.2011    source источник


Ответы (1)


Ваша привязка просто сломана (см. окно вывода Visual Studio для соответствующих ошибок), вы не хотите привязываться к DataContext.Content, а просто Content, DataContext будет объектом в этой строке вместо самого ContentControl.

Измените это в пути привязки повторно используемого шаблона, и он будет работать. Вы также устанавливаете для многих свойств значения, которые они уже имеют по умолчанию, это будет минимальная версия:

{Binding Content, RelativeSource={RelativeSource AncestorType=ContentControl}}
person H.B.    schedule 25.09.2011