【问题标题】:How to generate labels, buttons, Checkboxes and textboxes dynamically in WPF App如何在 WPF App 中动态生成标签、按钮、复选框和文本框
【发布时间】:2012-10-04 11:23:01
【问题描述】:

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

主窗口中的列表框和网格:

<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 时,我想按堆栈顺序显示 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 ​​相同。虽然借助工具箱在应用程序中创建标签很容易。

有没有一种方法可以根据从列表框中选择的项目在网格内生成它们?

【问题讨论】:

  • L1,B1,C1,T1 是否与模型有关? (他们指的是什么)
  • 没有。我不知道。我想知道如何自动生成这些 UI 组件。虽然我知道使用工具箱的实现,但是动态生成是我很无奈

标签: c# wpf mvvm dynamically-generated


【解决方案1】:

是的。

您需要的是不同的DataTemplates,您可以在其中定义所需控件的结构,并使用DataTemplateSelectorGrid 设置实际模板。

了解更多here

【讨论】:

  • Balogh:谢谢 :) 还有其他可以帮助我的代码/演示应用吗?
  • 好吧,我在网上搜索过,但看起来这在 WPF 中很少见。仍然无法弄清楚我该如何实现这一目标:(
猜你喜欢
  • 1970-01-01
  • 2012-10-21
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2019-09-29
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多