2015-01-15 3 views
0

Хотите заполнить сетку с помощью кнопок, которые все имеют одну и ту же 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

Вместо того, чтобы устанавливать элементы в Xaml, привяжите их к коллекции. С вашей DataTemplate, обязательными вам нужен класс с именем и 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; 
}