簡體   English   中英

資源,綁定中的WPF DataTemplate

[英]WPF DataTemplate in resource, binding

我有以下DataGrid(簡化)

<DataGrid ItemsSource="{Binding Something}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Test">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBox Text="{Binding A}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="{Binding A}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Test">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBox Text="{Binding B}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="{Binding B}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</Datagrid>

有沒有辦法將DataTemplate移動到資源並將其重用於不同的屬性,因此我不必為每個屬性復制和粘貼DataTemplate?

一個實用的解決方案是在資源級別定義模板,並將它們包裝在每列的“ContentPresenter”中。 您仍然必須明確定義每列的模板。 您仍然可以在一個位置管理模板,並快速查看列綁定的屬性。

<DataGrid>
     <!-- Templates in a single place in resources -->
     <DataGrid.Resources>
        <DataTemplate x:Key="CellTemplate">
           <TextBlock Text="{Binding}" />
        </DataTemplate>
        <DataTemplate x:Key="EditCellTemplate">
           <TextBlock Text="{Binding}" />
        </DataTemplate>
     </DataGrid.Resources>
     <DataGrid.Columns>
        <DataGridTemplateColumn>
           <DataGridTemplateColumn.CellTemplate>
              <DataTemplate>
                 <ContentPresenter Content="{Binding A}" ContentTemplate="{StaticResource CellTemplate}" />
                 </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
              <DataGridTemplateColumn.CellEditingTemplate>
                 <DataTemplate>
                    <ContentPresenter Content="{Binding A}" ContentTemplate="{StaticResource EditCellTemplate}" />
                 </DataTemplate>
              </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
               <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                     <ContentPresenter Content="{Binding B}" ContentTemplate="{StaticResource CellTemplate}" />
                  </DataTemplate>
               </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
               <DataTemplate>
                  <ContentPresenter Content="{Binding B}" ContentTemplate="{StaticResource EditCellTemplate}" />
               </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
         </DataGridTemplateColumn>
      </DataGrid.Columns>
</DataGrid>

你可以這樣做:

<DataGrid ItemsSource="{Binding Something}">
      <DataGrid.Resources>
         <DataTemplate x:key="MyTemplate">
             <Grid>
               <TextBox Text="{Binding}"/>
             </Grid>
         </DataTemplate>
      </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Test" 
                                    CellTemplate="{StaticResource MyTemplate}" 
                                    >
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </Datagrid>

但是,您需要重新考慮綁定邏輯,因為您需要在同一模板中為所有列使用cell datacontext。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM