GridView、ItemTemplate、DataTemplate 绑定在 C# 代码后面

Posted

技术标签:

【中文标题】GridView、ItemTemplate、DataTemplate 绑定在 C# 代码后面【英文标题】:GridView, ItemTemplate, DataTemplate binding in C# code behind 【发布时间】:2017-06-14 13:58:22 【问题描述】:

我有以下工作 XAML 和 C# 代码:

 <Grid x:Name="MainGrid" Background="ThemeResource ApplicationPageBackgroundThemeBrush">
    <GridView ItemsSource="Binding">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Height="100" Width="150">
                    <Grid.Background>
                        <SolidColorBrush Color="Binding Color"/>
                    </Grid.Background>
                    <StackPanel>
                        <StackPanel.Background>
                            <SolidColorBrush Color="Binding Color"/>
                        </StackPanel.Background>
                        <TextBlock FontSize="15" Margin="10" Text="Binding Name"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>

背后的代码:

public MainPage()

    this.InitializeComponent();
    var _Colors = typeof(Colors)
        .GetRuntimeProperties()
        .Select(x => new
        
            Color = (Color)x.GetValue(null),
            Name = x.Name
        );
    this.DataContext = _Colors;

这很好用。

但我想在后面的 C# 代码中完成所有 XAML 部分。在 XAML 中,只有MainGrid 会在那里,它的所有子元素和绑定都需要在代码中完成。

我在MainPage_Loaded 事件中尝试过这样的事情:

private void MainPage_Loaded(object sender, RoutedEventArgs e)

    try
    
        GridView gridView = new GridView()
        
            ItemTemplate = new DataTemplate
            
                //Don't know what to add here
            
        ;

        Grid grid = new Grid();
        Binding bindingObject = new Binding();
        bindingObject.Source = this;
        grid.SetBinding(Grid.BackgroundProperty, bindingObject);

        //...
        // Don't know how to add grid inside gridView in Code.
        //...

        MainGrid.Children.Add(gridView);
    
    catch (Exception ex)
    

    

【问题讨论】:

【参考方案1】:

首先,我想建议您不要在代码中创建元素,除非您有充分的理由这样做。

无论如何,考虑到项目模板是类似工厂的控件对象(您为每个项目“生成”一组新控件)。您使用FrameworkElementFactory 对子树建模,然后为其分配项目模板的VisualTree 属性。

【讨论】:

对不起,但是 FrameworkElementFactory,VisualTree 对我来说似乎很混乱。

以上是关于GridView、ItemTemplate、DataTemplate 绑定在 C# 代码后面的主要内容,如果未能解决你的问题,请参考以下文章

GridView、ItemTemplate、DataTemplate 绑定在 C# 代码后面

为啥Gridview模板中没有ItemTemplate模板

以编程方式更改 GridView ItemTemplate 中的数据绑定属性

ASP.Net GridView 和 TemplateField 可见性 - false 但 ItemTemplate 仍在执行

.net高手:我想在gridview加入一列图片

<ItemTemplate>标签在html里面有啥具体的作用?