WPF DataTemplateColumn访问DataTemplate并设置ItemsSource

时间:2010-10-12 13:06:01

标签: wpf data-binding datagrid datatemplate datagridtemplatecolumn

我知道我在做什么很奇怪,但是我想要这个。我觉得我错了。

我在我的资源中定义了一个DataTemplate,如下所示:

  <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../ParameterEditorResourceDictionary.xaml"></ResourceDictionary>
            <ResourceDictionary>

                <DataTemplate x:Key="ParameterDefault">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="("></TextBlock>
                        <ItemsControl ItemsSource="{//I need to set from code}">
                            //some code here
                        </ItemsControl>
                        <TextBlock Text=")"></TextBlock>
                    </StackPanel>
                </DataTemplate>

          </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>       
</UserControl.Resources>

我在我的xaml中定义了一个DataGrid,它有一个加载的事件。

 <cc:PEDataGrid AutoGenerateColumns="False"
               Loaded="CommonPEGrid_Loaded">        
</cc:PEDataGrid>

在我的事件处理程序代码中,我想设置在我的DataTemplate中定义的ItemsControl的ItemsSource。我的代码背后是这样的:

private void CommonPEGrid_Loaded(object sender, RoutedEventArgs e)
    {
        int i = 0;
        DataGrid dg = sender as DataGrid;

        DataGridTemplateColumn column = null;

        //ParametersAllLoops is a ObservableCollection

        foreach (ParameterLoop obj in ParametersAllLoops)
        {
            column = new DataGridTemplateColumn();
            column.Header = "Loop ( " + i.ToString() + " )";

            DataTemplate dt = null;

            //Here I want to write code
            //I want to access the DataTemplate defined in resources 
            //and set the ItemsSource of ItemsControl to something like this
            // xxx.ItemsSource = obj; and then assign the DataTemplate to 
            //the CellTemplate of column.
            //**Note :: ParameterLoop object has the IList Parameters**


            column.CellTemplate = dt;

            dg.Columns.Add(column);
            i++;            
        }
}

1 个答案:

答案 0 :(得分:0)

您可以使用FindResource()方法找到资源并将其强制转换为DataTemplate,但要为其分配ItemSource,您需要进行字符串操作。

似乎你想在你的数据网格上有动态列,我建议你在后面的代码中生成datatemplate,这样你就可以在那里解析你的绑定路径和源名称,然后将它作为单元格模板或单元格编辑附加模板。