XAML WPF:可扩展的项目组列表

8zzbczxx  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(114)

我是WPF的新手,我想知道如何创建一个包含可扩展数量的项目组的视图。在项目组中,我想放置一个Label和一个RadComboBox。我想有一个按钮(+),点击其中一个新的项目组出现在列表中。
假设我们从一个空视图和一个(+)按钮开始。通过单击(+),将出现带有组合框的标签。然后再次单击(+),将显示另一个带有组合框的标签。我希望这份名单能适合我想要的多组。标签和组合框的内容将由父列表的DataContext确定。
稍后我还想添加一个(-)按钮,它将删除选定的组,但我认为一旦我知道要使用哪些元素,我就可以自己解决这个问题。
有人知道我该怎么做吗?哪个元素可以容纳这些水平堆叠的组,我如何在一个“组”中放置标签和组合框?我主要关心的是XAML代码和(+)按钮背后的逻辑。

xnifntxz

xnifntxz1#

您可以使用ItemsControl来完成此操作。您可以将ItemsSource绑定到视图模型中的ObservableCollection。
下面是一个简单的示例(受this tutorial启发),演示了如何构建模板来显示每个组:

<ItemsControl Height="30">
            
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
            
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding}" />
                <ComboBox Width="50" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

    <system:String>Item #1</system:String>
    <system:String>Item #2</system:String>
    <system:String>Item #3</system:String>
    <system:String>Item #4</system:String>
    <system:String>Item #5</system:String>
            
</ItemsControl>

ItemsPanel定义了控制组布局的面板。这里我使用了一个StackPanel,方向设置为水平。ItemTemplate设置用于显示每个组的DataTemplate。这里我使用了一个标签和一个组合框。ItemTemplate中的DataContext将是您设置为ItemsSource的ObservableCollection中的一个项。
至于(+)按钮,你可以使用一个Button来添加一个元素到你的ObservableCollection中。您应该在ViewModel上为此创建一个Command,并将Button的Command属性绑定到它。

相关问题