2013-03-12 3 views
1

у меня есть что-то вроде этого внутри сетки:Как связать `ObservableCollection` с сеткой с строками/столбцами, указанными в объектах?

<Ellipse Grid.Row="{Binding Path=Game.Tiles[2].Row}" 
      Grid.Column="{Binding Path=Game.Tiles[2].Column}" 
      Fill="{Binding Game.Tiles[2].FillColor}" 
      Stroke ="{StaticResource TileStroke}"></Ellipse> 

Как перечислить по всем 24 объектам, не печатая это 24 раз?

+0

Это в контексте WPF? Также вы могли бы объяснить свою проблему немного лучше? Что ты пытаешься сделать? –

+0

Да, это в 'UserControl' и внутри' Grid'. –

+0

Вы пытались сделать это из кода? –

ответ

4

Чтобы иметь список/коллекцию отображаемых объектов, вам нужно использовать сортировку «ItemsControl». В этом случае, следующий фрагмент может быть полезно:

<ItemsControl ItemsSource="{Binding Game.Tiles}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Grid.Column" Value="{Binding Column}" /> 
      <Setter Property="Grid.Row" Value="{Binding Row}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type local:Position}"> 
      <Ellipse Fill="{Binding FillColor}" 
        Stroke="{StaticResource TileStroke}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Не забудьте положить в правом ТипДанных для DataTemplate и достаточно строк/столбцов в сетку для хранения данных.

Также не так легко включить неизвестное количество строк/столбцов. Если это интересно, я могу вернуться к вам с решением, но исходный пост читается как идея игрового поля - вроде шашек - поэтому я предполагаю, что количество столбцов/строк является постоянным.

+0

Это решение не включает свойства заливки и обводки. Более того, количество строк может быть неизвестно во время компиляции. Edit: Хорошо, он особенно хочет 24 строки, но было бы неплохо, если бы вы предоставили решение, которое включает неизвестное количество строк. – mostruash

+0

Обновлен, чтобы лучше отражать исходный фрагмент кода. –

+0

Спасибо! Это работает, но для меня это кажется очень волшебным: P –