WPF:在运行时修改ListView的DataTemplate

时间:2013-08-21 21:15:00

标签: .net wpf

我需要修改我的DataTemplate,以便在运行时向我的StackPanel添加一些列。

所以我需要一种方法来访问我的用户控件中的'stackPanelLeft'和'stackPanelRight'。

我知道我可以将所有代码放入一个长xml字符串并加载它,但我想找到一种方法从DataTemplate访问堆栈面板并以这种方式修改它们。一种“混合”方式。

<ListView.ItemTemplate>
    <DataTemplate>
        <Grid x:Name="mainGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="40" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="40" />
            </Grid.ColumnDefinitions>
            <CheckBox />
            <Image Grid.Column="1" />
            <StackPanel Grid.Column="2" x:Name="stackPanelLeft"/>
            <StackPanel Grid.Column="3" x:Name="stackPanelRight"/>
            <Image Grid.Column="4" />
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

我不知道堆栈面板会是什么。根据环境的不同,它可能是按钮,文本框,复选按钮等。

我尝试使用FindName方法,但由于尚未创建Visual Tree,因此它只返回null。

一旦我有权访问堆栈面板,我计划通过FrameworkElementFactory方法添加控件。

这是我想要的方法,但我愿意接受完全不同的想法

var leftPanel = FindName("stackPanelLeft");

FrameworkElementFactory control = new FrameworkElementFactory(typeof(TextBlock));
textBlock.SetBinding(TextBlock.TextProperty, new Binding(dataTable.ColumnName));
leftPanel.AppendChild(textBlock);

0 个答案:

没有答案