У меня есть DataGrid, где различные элементы в строке могут быть доступны для редактирования или только для чтения.Изменение привязки элемента внутри шаблона
Если бы я имел одну ячейку, которую необходимо сделать только для чтения по желанию, я хотел бы использовать что-то вроде
<DataGrid.Resources>
<!-- the non-editing cell -->
<DataTemplate x:Key="ReadonlyCellTemplate">
<TextBlock Text="{Binding UserName}" />
</DataTemplate>
<!-- the editing cell -->
<DataTemplate x:Key="EditableCellTemplate">
<TextBox Text="{Binding UserName}" />
</DataTemplate>
</DataGrid.Resources>
И чем я бы применить этот шаблон к колонку моего выбора.
<DataGridTemplateColumn CellTemplate="{StaticResource ReadonlyCellTemplate}" Header="User name">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!-- the additional layer of content presenter -->
<ContentPresenter x:Name="Presenter" Content="{Binding}" ContentTemplate="{StaticResource ReadonlyCellTemplate}" />
<DataTemplate.Triggers>
<!-- dynamically switch the content template by IsEditable binding -->
<DataTrigger Binding="{Binding CreationFieldsEditable}" Value="True">
<Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource EditableCellTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Я хочу, чтобы иметь возможность изменить {Binding UserName}
внутри шаблона, так что я могу применить шаблон к различным столбцам.
Как это сделать?
Если вы имеете в виду изменение свойства привязки, например вместо Text = "{Binding UserName1}" в Text = "{Binding UserName2}", я обычно делаю в этих случаях изменение самого элемента с помощью триггера данных. Если я хорошо понял условия, я могу дать детали для решения. –