4

現在、私はにバインドしているList<T>ので、特定のセットを各列に個別に実行する必要がありますDataTemplate

このような:

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
       <TextBlock TextAlignment="Center" 
                  Text="{Binding ObColl[1].Std, UpdateSourceTrigger=PropertyChanged}"
                  Background="{Binding ObColl[1].DienstColor, TargetNullValue=Transparent,FallbackValue=Transparent}" />
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

しかし、私がしたいのはDataTemplate、リソースとして一度だけ作成することです

<DataGrid.Resources>
        <DataTemplate x:Name="MyCellTemplate">
           <TextBlock TextAlignment="Center" 
                      Text="{Binding Std, UpdateSourceTrigger=PropertyChanged}"
                      Background="{Binding DienstColor, TargetNullValue=Transparent,FallbackValue=Transparent}" />
        </DataTemplate>
</DataGrid.Resources>

そしてそれを次のように使用します

<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate} ??{Binding ObColl[1]}??"/>

しかし、そのためにはDataContext(ObColl[Idx])を指定する必要がありDataGridTemplateColumn ますが、どうすればよいですか?


編集

xaml は次のようになります。

    <DataGrid Name="dataGrid1"
              ItemsSource="{Binding Itemlist, UpdateSourceTrigger=PropertyChanged}">
        <DataGrid.Resources>
            <DataTemplate x:Key="MyCellTemplate">
                <TextBlock TextAlignment="Center" 
                           Text="{Binding Std, UpdateSourceTrigger=PropertyChanged}" 
                            Background="{Binding DienstColor, TargetNullValue=Transparent, FallbackValue=Transparent}" />
            </DataTemplate>

        </DataGrid.Resources>

        <DataGrid.Columns> 
            <!-- Column 1 -->
            <DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" 
                                    DataContext={Binding ObColl[0]}/> 
            <!-- Column Header 2 -->
            <DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" 
                                    DataContext={Binding ObColl[1]}/> 
        </DataGrid.Columns>
    </DataGrid>

これ DataContext={Binding ObColl[1]}は存在しないので問題の部分です....

4

1 に答える 1

1

わかりました、これがあなたの要件についての私の理解です... MyRow2つのプロパティを持つクラスがあります。 MyRowheaderMyCellList。の各行にコレクションのMyRowheader値と1 つの値を表示します。これは私がそれを行う方法です:MyCellListDataGrid

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding YourCollection}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header" Binding="{Binding MyRowheader, 
UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTemplateColumn Header="Cell list">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding MyCellList[1].Std, UpdateSourceTrigger=
PropertyChanged}" Background="{Binding MyCellListl[1].DienstColor, TargetNullValue=
Transparent, FallbackValue=Transparent}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

あなたの要件を誤解している場合はお知らせください。


更新 >>>

だから私はあなたの要件を誤解しました。の行ではなく、各MyCellListにコレクションから 1 つの値が必要なようです。その場合、私の答えはノーです。またはその他の XAML 保存機能を使用してセットアップすることはできません。XAML は冗長な言語です。より効率的に記述する方法はいくつかありますが、多くはありません。XAML ページでコードが繰り返されることがよくあります。DataGridDataGrid.ColumnsDataTemplate

私が考えることができる唯一の方法は、コードから列を動的に生成した場合です。その基本的な例は、wpf投稿で列を DataGrid に動的に追加するで見つけることができます。実際にどれだけの時間を節約できるかはわかりません。

于 2013-11-20T12:36:19.200 に答える