动态地和编程地使用按钮单击来重复UWP中的一组控件

时间:2018-08-10 05:32:29

标签: c# xaml uwp uwp-xaml

我试图每次用户单击添加按钮时动态添加一组控件,并在用户单击删除按钮时将其删除。 Controls to be repeated

Before

After clicking Add Item

XAML代码

<StackPanel Name="itemStack" Orientation="Horizontal" VerticalAlignment="Bottom" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="4">
    <AutoSuggestBox Name="itemCategory"
                PlaceholderText="Ring"
                Header="Item Category" 
                Grid.Row="3" 
                Grid.Column="0"
                HorizontalAlignment="Stretch" 
                QueryIcon="List"
                Margin="10,10,10,0"
                />
    <AutoSuggestBox Name="itemDescription" 
                PlaceholderText="3 White Stone Ring" 
                Header="Description of the Jewels"                          
                Grid.Row="3" 
                Grid.Column="1"
                Grid.ColumnSpan="2"
                HorizontalAlignment="Stretch" 
                QueryIcon="List"
                Margin="10,10,10,0"
                />
    <TextBox Name="qty" 
        Text="1" 
        Header="Quantity"
        Grid.Row="3" 
        Grid.Column="4"
        HorizontalAlignment="Stretch"
        Margin="10,10,10,0"
        />
    <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Grid.Row="3" Grid.Column="5">
        <AppBarButton Name="addItem_button"
                    Icon="Add"
                    Label="Add item"                                    
                    LabelPosition="Default"
                    VerticalAlignment="Bottom"
                    Click="addItem_button_Click"
                    />
        <AppBarButton Name="deleteItem_button"
                    Icon="Cancel"
                    Label="Del item"
                    LabelPosition="Default"      
                    VerticalAlignment="Bottom"
                            />
    </StackPanel>
</StackPanel>

我想重复整个堆栈面板,包括appbar按钮。

2 个答案:

答案 0 :(得分:2)

在这种情况下,使用带有ListView的MVVM(模型-视图-视图模型)数据绑定将是理想的选择。

您需要做的是创建一个ListView,其中将包含StackPanel作为其ItemTemplate。然后,您将需要一个ViewModel类,该类将以TwoWay的方式与控件进行数据绑定,这将确保在控件中选择的值将投影在ViewModel类上。最后,要创建按钮功能,您需要将操作绑定到Command属性。

由于一开始需要做很多事情,所以我建议您首先阅读一些有关UWP中数据绑定的简单教程:

答案 1 :(得分:0)

正如@Martin在他的回答中所说,实现所需内容的常用方法是将Listview与ItemTemplate一起使用。

如果要将其插入到网格行中,这意味着您将需要进行大量编程工作:创建控件,更新网格行并插入控件。您还必须监视何时删除控件以更新网格。

如果要那样做,请将xaml包装在自定义控件中,以便您可以重用它。然后在代码隐藏中操作网格的Children属性。您将使用Grid附加属性Grid.SetRow将行分配给控件。

如您所见,很多