powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Плиткой отобразить элементы
7 сообщений из 7, страница 1 из 1
Плиткой отобразить элементы
    #38952809
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть такая вот задача:
Мне из БД приходит список элементов. Каждый элемент содержит свой номер и один булевый признак.

Задача 1) Мне надо все эти элементы отобразить в гриде (или другом контроле) плиткой. Я стараюсь писать следуя идеологии MVVM. Я не пойму как мне сгенерировать набор textblock`ов и вывести их на грид используя mvvm подход.
Может у кого-то есть примерчик подобной задачи?

При этом если элементов много, то позволить скролить датагрид, чтобы можно было просмотреть все элементы.

Задача 2)

После некоторой магии, которую совершает пользователь, у меня меняется тот самый булевый признак и мне надо весь этот массив обновить в БД.
По сути задача - "вкл/выкл элементы" в некотором массиве. При этом, мне кажется, что записывать признак в БД сразу при его изменении (у единичного элемента) как-то не очень хорошо. Хотелось бы по финалу прописать всё одним махом.

Вопрос: Как правильно в MS SQL передать массив элементов (ну к примеру тех же int, он же просто id элемента)?
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38953519
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Вот.Может кому пригодится:

<ItemsControl Grid.Row="1" ItemsSource="{Binding Tares}" Margin="5">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

<ItemsControl.ItemTemplate>
<DataTemplate DataType="tareReturnController:p_GetTaresForReturnResult">
<Border Width="100" Height="30" Background="IndianRed" Margin="10">
<Grid>
<TextBlock Text="{Binding barcode}" FontSize="15">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsReturned}" Value="0">
<Setter Property="TextBlock.Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38953520
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Забыл обернуть!

Вот! Может кому пригодится:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
  <ItemsControl Grid.Row="1" ItemsSource="{Binding Tares}" Margin="5">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="tareReturnController:p_GetTaresForReturnResult">
                    <Border Width="100" Height="30" Background="IndianRed" Margin="10">
                        <Grid>
                            <TextBlock Text="{Binding barcode}" FontSize="15">
                                <TextBlock.Style>
                                    <Style>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding IsReturned}" Value="0">
                                                <Setter Property="TextBlock.Background" Value="Red"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38954076
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путь такой:
а) Делается Панель на базе класса Panel или VirtualizingPanel (если нужна визуализация и если она вообще возможна).
В этом классе основная задача переопределить 2 метода MeasureOverride и ArrangeOverride.
1 метод для расчета размеров самого себя и содержимого, 2 для размещения элементов в свойстве Children на себе (на панели).
б) После этого создаешь класс наследованный от ItemsControl или используешь его (или других его наследников), определяешь для этого контрола Panel ту панель, что ты сделал в пункте а)
в) можешь сделать обёртку аля ListBoxItem\TreeViewItem для отображения содержимого элементов списка.
г) по визуализации могу только отдельным постом, так как там очень заморочено
соответственно, в панеле будет определено как размещаются элементы, на твоё усмотрение, хоть шестигранниками укладывай, хоть по кругу или в 3D. Добавление удаление элементов будет лежать на плечах ItemsControl'а (а в купе с виртуализацией).

Останется определить шаблон данных для элементов и создать модель представления под это дело.
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38964139
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Мне кажется, или описанной мною "стандартный" метод выше - проще?
Ваш метод, как мне кажется, применим, когда требуется уж полная кастомизация. Мне же нужен был простой и быстрый способ. Я его нашёл как мне кажется.

В любом случае спасибо за ответ!
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38964164
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Roman Mejtes,

Мне кажется, или описанной мною "стандартный" метод выше - проще?
Ваш метод, как мне кажется, применим, когда требуется уж полная кастомизация. Мне же нужен был простой и быстрый способ. Я его нашёл как мне кажется.

В любом случае спасибо за ответ!
не кто же не спорит, Wrap панель имеет своё способ компоновки элементов, вам виднее, какой именно способ вам нужен, но если вам нужен такой способ который из коробочки не предоставляется, то приходится пилить самостоятельно :( а если нужна виртуализация (а у WrapPanel виртуализация отсутствует в 4.0 на сколько я знаю, на счет 4.5 не знаю) то только ручками :)
есть еще вариант UniformGrid, если вам нужно, чтоб количество столбцов и строк было неизменным, так как WrapPanel такой возможности не предоставляет. в UniformGrid можно не определять Grid.Row и Grid.Column, если эти свойства не заданы, то элементы будут ложиться слева направо, сверху вниз. Если элементов будет больше, чем произведение столбцов и строк, то они будут размещаться за пределами UniformGrid'а, при этом прокрутки не будет, так как размер самого грида будет неизменным, а интерфейса IScrollViewer он не поддерживает. Хотя думаю, можно унаследовать и подкрутить гайки :)
...
Рейтинг: 0 / 0
Плиткой отобразить элементы
    #38964167
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка, интерфейс IScrollInfo
и Grid.Row, Grid.Column можно не задавать у элементов ofc =)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Плиткой отобразить элементы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]