更改模板内元素的绑定

时间:2016-10-09 10:55:06

标签: c# wpf xaml datagrid

我有一个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},以便将模板应用于不同的列。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

而不是

public static IEnumerable<T> Query<T>
(this IDbConnection dbconnection, 
SQLinq<T> query, 
IDbTransaction transaction = null, 
bool buffered = true, 
int? commandTimeout = default(int?), 
CommandType? commandType = 
default(CommandType?)) where T : new();

var viewData = sqlCnn.Query(from s in new SQLinq<Returns_stats()
              select new
                {
                AVGPercentReturnX100 = s.AVGPercentReturnX100,
                PercentProfitableX100 = s.PercentProfitableX100
                }, buffered:true).AsEnumerable()

您需要扩展模板:

 <DataTemplate x:Key="EditableCellTemplate">
    <TextBox Text="{Binding UserName}" />
</DataTemplate>

如果我理解你的想法,这应该有效。