更改模板内元素的绑定
本文关键字:元素 绑定 | 更新日期: 2023-09-27 18:12:09
我有一个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}
,以便我可以将模板应用于不同的列。
我该怎么做?
代替
<DataTemplate x:Key="EditableCellTemplate">
<TextBox Text="{Binding UserName}" />
</DataTemplate>
你需要扩展模板:
<DataTemplate x:Key="t1">
<TextBox Text="{Binding UserName1}" />
</DataTemplate>
<DataTemplate x:Key="t2">
<TextBox Text="{Binding UserName2}" />
</DataTemplate>
<DataTemplate x:Key="EditableCellTemplate">
<ContentPresenter x:Name="ctp" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding MyProperty}"
Value="1">
<Setter TargetName="ctp"
Property="ContentTemplate"
Value="{StaticResource t1}" />
</DataTrigger>
<DataTrigger Binding="{Binding MyProperty}"
Value="2">
<Setter TargetName="ctp"
Property="ContentTemplate"
Value="{StaticResource t2}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
如果我能很好地理解你的想法,这应该行得通。