如何在WPF应用程序中动态生成标签,按钮,复选框和文本框

时间:2012-10-04 11:23:02

标签: c# wpf mvvm dynamically-generated

我是WPF的新手。我正在关注MVVM模式。我的主窗口中有列表框,其中包含项目列表。我还有一个在启动时为空的网格。现在这里是查询,从列表框中选择项目,我想动态生成标签,按钮,复选框和文本框,而不是使用工具箱。

ListBox& MainWindow中的网格:

<ListBox Name="ButtonPanel" ItemsSource="{Binding BoardTabs}" SelectedItem="{Binding SelectedTab, Mode=TwoWay}" >
        <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Button Margin="0,27,0,0" Content="{Binding TabName}" />
            </StackPanel>
        </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

<Grid Height="461" HorizontalAlignment="Left" Margin="139,0,0,0" Name="grid1" VerticalAlignment="Top" Width="339" >

</Grid>

TabName 是字符串,是我的模型类的一部分。

ViewModel类:

public List<Product> m_BoardTabs; 
public ProductViewModel()
{       
    m_BoardTabs = new List<Product>()
    {
        new Product() {TabName = "A"}, 
        new Product() {TabName = "B"},
        new Product() {TabName = "C"},               
    };
}                      

public List<Product> BoardTabs
{
    get
    {
        return m_BoardTabs;
    }

    set
    {
        m_BoardTabs = value;
    }
}

private Product m_SelectedItem;
public Product SelectedTab
{
    get
    {
        return m_SelectedItem;
    }

    set
    {
        m_SelectedItem = value;                
        NotifyPropertyChanged("SelectedTab");
    }
}    

演示:

ListBox有3个项目。 A,B,C

在选择A时,在我的网格中,我想以堆栈顺序显示L1,L2,L3。 B1,B2,B3按堆叠顺序排列,C1,C2,C3和T1,T2,T3等,其中L是标签,B是按钮,T是文本框,C是复选框。

选择B时,在我的网格中,我想以堆叠顺序显示L5,L6,L7。 B5,B6,B7按堆叠顺序排列,C5,C6,C7和T5,T6,T7等等,其中L是标签,B是按钮,T是文本框,C是复选框。

与选择C相同。虽然在工具箱的帮助下很容易在应用程序中创建标签。

有没有办法可以根据Listbox中的选定项目在网格内生成它们?

1 个答案:

答案 0 :(得分:1)

是。

对于您可以定义所需控件结构的每种情况,您需要的是DataTemplates; DataTemplateSelector可以为Grid设置实际模板。

查找更多here