Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
EveKS
391 / 354 / 148
Регистрация: 19.04.2016
Сообщений: 1,430
Завершенные тесты: 7
#1

Как отобразить ObservableCollection<ObservableCollection<Page>> ?

03.09.2016, 19:43. Просмотров 335. Ответов 6
Метки нет (Все метки)

Предположим у меня есть класс VM:
C#
1
2
3
4
5
6
7
8
9
public class VM
    {
       public ObservableCollection<ObservableCollection<Page>> PagesContent { get; set; } =
            new ObservableCollection<ObservableCollection<Page>>();
       public async Task Load()
       {
            // Заполняю коллекцию
       }
    }
C#
1
2
3
4
5
    public class Page
    {
        public string Content { get; set; }
        public string Img { get; set; }
    }
Далее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        VM VM = new VM();
        public MainPage()
        {
            this.DataContext = VM;
            this.InitializeComponent();
        }
 
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            await VM.Load();
            base.OnNavigatedTo(e);
        }
Как отобразить данные коллекции?
Пробовал так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
        <GridView ItemsSource="{Binding PagesContent}">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <GridView ItemsSource="{Binding}">
                        <GridView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Content}"/>
                            </DataTemplate>
                        </GridView.ItemTemplate>
                    </GridView>
                </DataTemplate>
            </GridView.ItemTemplate>            
        </GridView>
Но что-то не так...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2016, 19:43
Ответы с готовыми решениями:

Как привязать DataGrid к ObservableCollection
Есть модель клиента,МодельПросмотра,если можно так перевести,которая реализует...

ObservableCollection<> + listview - ошибок нет, как и результатов
Пример, проще некуда, output.degub ошибок не выдает, дескать все в порядке, но...

Как обновить Xaml при изменении ObservableCollection
при изменении данных Xaml не обновляется, грешу на эту часть кода или...

Как добавить данные из Observablecollection в базу данных?
Здравствуйте) Подскажите пожалуйста, как добавить элемент Observablecollection...

Как уменьшить объем памяти занимаемой ObservableCollection
1. Каким образом уменьшить объем памяти для хранения данных? Данная информация...

6
IamRain
1292 / 1184 / 363
Регистрация: 02.08.2011
Сообщений: 3,449
03.09.2016, 20:42 #2
Цитата Сообщение от EveKS Посмотреть сообщение
Но что-то не так...
А если вот так:
XML
1
<GridView ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
0
EveKS
391 / 354 / 148
Регистрация: 19.04.2016
Сообщений: 1,430
Завершенные тесты: 7
03.09.2016, 21:33  [ТС] #3
IamRain, это wpf, там Page, и что-то не выходит.
Пока думаю об отказе от ObservableCollection<ObservableCollection<T>> и как это лучше реализовать.
0
IamRain
1292 / 1184 / 363
Регистрация: 02.08.2011
Сообщений: 3,449
03.09.2016, 21:47 #4
Не обратил сразу внимания на коллекцию коллекций, чего то вы намудрили.
Наверное вот так:
C#
1
2
3
4
5
6
7
8
public class VM
    {
       public ObservableCollection<Page> PagesContent { get; set; } = new ObservableCollection<Page>();
       public async Task Load()
       {
            // Заполняю коллекцию
       }
    }
XML
1
<GridView ItemsSource="{Binding Path=DataContext.PagesContent}">
0
EveKS
391 / 354 / 148
Регистрация: 19.04.2016
Сообщений: 1,430
Завершенные тесты: 7
03.09.2016, 21:56  [ТС] #5
IamRain,
Создал тестовую коллекцию коллекций:
C#
1
2
3
4
5
6
7
        public ObservableCollection<ObservableCollection<string>> Text { get; set; } = new ObservableCollection<ObservableCollection<string>>(
            new List<ObservableCollection<string>>
            {
                new ObservableCollection<string>(new List<string> { "11", "11" }),
                new ObservableCollection<string>(new List<string> { "22", "22" }),
                new ObservableCollection<string>(new List<string> { "33", "33"}),
            });
Отображаю:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<GridView ItemsSource="{Binding Text}">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid Width="100" Height="50" Background="White">
                        <GridView ItemsSource="{Binding Mode=OneWay}" Margin="0,0,-255,-130">
                            <GridView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding}"></TextBlock>
                                </DataTemplate>
                            </GridView.ItemTemplate>
                        </GridView>
                    </Grid>                        
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
Всё работает... Буду думать
0
IamRain
1292 / 1184 / 363
Регистрация: 02.08.2011
Сообщений: 3,449
03.09.2016, 22:04 #6
Да не должно быть таких конструкций в WPF.

ViewModel однозначно отображает свои свойства на элементы управления вьюхи, если у вас сложный UI, то ViewModel тоже усложняется, но не за счет такого:
ObservableCollection<ObservableCollection<Page>> PagesContent
А за счет того, что сама ViewModel будет иметь коллекцию других VM, afaik:
C#
1
2
3
4
5
 public class PageViewModel
    {
        public string Content { get; set; }
        public string Img { get; set; }
    }
Каждая PageViewModel имеет свою вьюху. Я сто лет не писал на WPF/Silverlight, могу неточно выражаться. Но этот принцип - его трудно забыть.
Само же отображение ViewModel на View всегда должно быть простым. А не этот чудо с вложенными коллекциями.
1
EveKS
391 / 354 / 148
Регистрация: 19.04.2016
Сообщений: 1,430
Завершенные тесты: 7
04.09.2016, 20:14  [ТС] #7
IamRain, в итоге моя ошибка была в заполнении коллекции в двух разных потоках... Заполнял одну, выводил другую... Большое спасибо за совет, в дальнейшем планирую расширять, и избавиться от коллекции в коллекции. Будут заполняться Page и выводиться на экран отдельными блоками.
0
04.09.2016, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2016, 20:14

Как заполнить DataGrid элементами ObservableCollection или List
Есть класс, содержащий строку и List ссылок на другой, состоящий из чисел(А и...

Как реализовать ObservableCollection состоящую из DataGrids и оповещать её об изменениях?
В приложении создаю вкладки с помощью кода, которым присваиваю контент....

ObservableCollection привязана к DataGrid, как реализовать поиск и удаление в коллекции?
ObservableCollection&lt;class&gt; привязана к DataGrid, как реализовать поиск,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru