如何用按钮填充 GridView?

How to populate GridView with buttons?

想要用共享相同 ICommand 的按钮填充 gridview。

到目前为止我有这个:

    <DataTemplate x:Key="DataTemplate1">        
        <Button Content="{Binding Name}" 
                Command="{Binding NumberCommand}">                
        </Button>
    </DataTemplate>

    <GridView SelectionMode="None" 
              ItemContainerStyle="{StaticResource GridViewItemStyle1}" 
              ItemTemplate="{StaticResource DataTemplate1}">          
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" 
                          MaximumRowsOrColumns="3">
                </WrapGrid>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridViewItem Content="1"></GridViewItem>
        <GridViewItem Content="2"></GridViewItem>
        <GridViewItem Content="3"></GridViewItem>
        <GridViewItem Content="4"></GridViewItem>
        <GridViewItem Content="5"></GridViewItem>
        <GridViewItem Content="6"></GridViewItem>
        <GridViewItem Content="7"></GridViewItem>
        <GridViewItem Content="8"></GridViewItem>
        <GridViewItem Content="9"></GridViewItem>            
    </GridView>

问题是 GridViewItems 只是显示为文本而不是按钮。我做错了什么?

而不是设置 Xaml 中的项目,将它们绑定到一个集合。使用 DataTemplate 的绑定,您需要 class 具有 Name 和 NumberCommand 属性:

class MyData
{
    public string Name { get; set;}
    public ICommand MyCommand { get; set; }
}

然后创建数据集合:

ObservableCollection<MyData> data;

并将其绑定到 GridView。为简单起见,我在这里为 Grid 命名并直接设置 ItemsSource。对于您的场景,这可能已经足够好了。您显然也想连接命令,对于更复杂的场景,您可以通过 CollectionViewSource 进行绑定。

public MainPage()
{
    this.InitializeComponent();

    data = new ObservableCollection<MyData>();
    for (int i=1;i<10;i++)
    {
        data.Add(new MyData() { Name = i.ToString() });
    }
    myGrid.ItemsSource = data;
}