Как связать дочерние элементы ItemsControl в пользовательском элементе управления с 2D-массивом WPF C #? - PullRequest
1 голос
/ 21 июля 2011

У меня есть пользовательский элемент управления в XAML, который создает ItemsControl, который ItemsPanel представляет собой унифицированную сетку 15 * 15. Затем ItemsControl заполняется ячейками при запуске.

<UserControl x:Class="Words.GameBoard"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:Words="clr-namespace:Words"
         xmlns:Cell="Words.CellCollection"
         xmlns:CellTile="Words.Cell"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <Words:CellCollection x:Key="CellCollectionData">
    </Words:CellCollection>
    <Style TargetType="ItemsControl">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <UniformGrid IsItemsHost="True" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Words:Cell>
                    </Words:Cell>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<ItemsControl Name="BoardControl">
</ItemsControl>

Элемент управления добавляется в MainWindow следующим образом

            <clr:GameBoard>
            </clr:GameBoard>

Как мне связать элементы ItemsControl с массивом? Мне не нужны Observables и прочее, я просто хочу, чтобы Предметы обновлялись при нажатии кнопки. Это возможно? Я очень плохо знаком с C # и XAML

Спасибо

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Вам необходимо установить ItemsSource в ItemsControl для привязки массива следующим образом:

<ItemsControl Name="BoardControl" ItemsSource={DynamicResource CellCollectionData} />

Я предполагаю, что вы хотите привязать CellCollectionData. Однако, как правило, я ожидаю, что данные будут в DataContext, и в этом случае вы будете использовать:

<ItemsControl Name="BoardControl" ItemsSource={Binding} />

(если DataContext UserControl был установлен в массив)

или

<ItemsControl Name="BoardControl" ItemsSource={Binding MyArray} />

(если DataContext UserControl был классом, который содержал свойство, которое возвращало массив)

Пока вы изучаете и тестируете, я бы предложил преобразовать ItemsControl в ListBox, чтобы вы могли видеть, что элементы действительно добавляются (нажав на выбираемый элемент). Как только вы правильно настроите внешний вид, вы можете изменить его обратно на ItemsControl (который не позволяет выбрать элемент).

0 голосов
/ 21 июля 2011

Вы можете привязать его к массиву, установить свойство ItemsSource = "{Binding Path = ArrayProperty}" Я полагаю, у вас есть модель с массивом, связанным с этим представлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...