如何使用按钮填充GridView?

时间:2015-01-15 21:36:25

标签: xaml windows-store-apps

想要使用共享相同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只是显示为文本而非按钮。我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

然后创建数据集合:

ObservableCollection<MyData> data;

并将其绑定到GridView。为简单起见,我在这里为网格命名并直接设置ItemsSource。这对你的场景来说可能已经足够了。您显然也想要连接Command,对于更复杂的场景,您可以通过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;
}