Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Табконтроол и грид / 19 сообщений из 19, страница 1 из 1
19.04.2018, 11:52
    #39633070
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Есть у меня ТабКонтрол и в каждую вкладку мне надо вложить один и тот же грид, но с разным ItemSource. Как это сделать? DataTemplate, ControlTemplate или UserControl или ...
...
Рейтинг: 0 / 0
19.04.2018, 11:59
    #39633073
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Qwe.Qwe1,
исходя из описания вопроса нужен разный биндинг итемсорсов. Но что-то мне подсказывает, что Вы предлагает попытать счастья отвечающим Вам в ванговании более подробной описании проблемы и телепатии.
...
Рейтинг: 0 / 0
19.04.2018, 12:04
    #39633076
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Табконтрол сам является ItemControl-ом, так что можно сам источник вкладок ItemsSource задать через привязку, а потом DataGrid.ItemsSource привязывать к TabControl.SelectedItems.ItemsForDataGrid и задать контент для вкладки в виде шаблона с DataGrid-ом
...
Рейтинг: 0 / 0
19.04.2018, 12:07
    #39633081
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.ProТабконтрол сам является ItemControl-ом, так что можно сам источник вкладок ItemsSource задать через привязку, а потом DataGrid.ItemsSource привязывать к TabControl.SelectedItems.ItemsForDataGrid и задать контент для вкладки в виде шаблона с DataGrid-омТаким образом, ты добьешься как раз того, что будет один грид на все вкладки. Но подумай, нужно ли это тебе. Дело в том, что при переключении вкладок и смене источника данных в этом гриде, у тебя будут теряться вводимые данные (если они не закончены), текущая строка в гриде, текущее состояние скроллера и т.п.

Что вообще ты подразумеваешь под "один и тот же грид"? Может все-таки гриды разные, просто у них одинакое описание столбцов? ну и вынеси его в статический ресурс тогда.
...
Рейтинг: 0 / 0
19.04.2018, 12:21
    #39633089
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Ну я описал грид: его свойства, задал колонки (названия, картинки там, выравнивания и прочее). Получился приличный такой блок XAML кода. Теперь его надо добавить на условно 5 вкладок. Отличаться будет только ItemSource - у меня есть 5 разных списков однотипных данных. Не хочется делать "контрол цэ - контрол вэ"...
...
Рейтинг: 0 / 0
19.04.2018, 12:26
    #39633094
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Qwe.Qwe1задал колонкито есть повторяющийся код в <DataGrid.Columns>, так? ну вот вынеси коллекцию в статический (или динамический ресурс)
...
Рейтинг: 0 / 0
19.04.2018, 12:33
    #39633098
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Вот как это выглядит сейчас:
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
	<dx:DXTabControl Margin="10">
            <dx:DXTabItem Header="Вкладка 1">
                <ScrollViewer Style="{StaticResource MainScrollViewer}">
                    <dxg:TreeListControl EnableSmartColumnsGeneration="True" Margin="0" ItemsSource="{Binding MyFirstList}">
                        <dxg:TreeListControl.Resources>
                            <Style TargetType="dxg:TreeListColumn" BasedOn="{StaticResource ColumnStyle}"/>
                            <Style TargetType="dxg:GridColumnHeader">
                                <Setter Property="Height" Value="65"/>
                            </Style>
                        </dxg:TreeListControl.Resources>
                        <dxg:TreeListControl.Columns>
                            <dxg:TreeListColumn Header="Название" Width="6*"/>
                            <dxg:TreeListColumn Header="Владелец" Width="2*"/>
                            <dxg:TreeListColumn Header="Основание" Width="2*"/>
                            <dxg:TreeListColumn Width="50" Style="{StaticResource FixedColumnStyle}">
                                <dxg:TreeListColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <Image Source="{dx:DXImage Image=Open_16x16.png}" Stretch="None"/>
                                    </DataTemplate>
                                </dxg:TreeListColumn.HeaderTemplate>
                            </dxg:TreeListColumn>
                            <dxg:TreeListColumn Header="Дата" Width="100" Style="{StaticResource FixedColumnStyle}"/>
                        </dxg:TreeListControl.Columns>
                        <dxg:TreeListControl.View>
                            <dxg:TreeListView AllowPerPixelScrolling="True" AllowEditing="False" ShowIndicator="False" ShowVerticalLines="False" ShowHorizontalLines="False" NavigationStyle="None" VerticalScrollbarVisibility="Auto"
                                              TreeDerivationMode="ChildNodesSelector" ChildNodesPath="Child"/>
                        </dxg:TreeListControl.View>
                    </dxg:TreeListControl>
                </ScrollViewer>
            </dx:DXTabItem>
            <dx:DXTabItem Header="Вкладка 2">
		TODO
            </dx:DXTabItem>
            <dx:DXTabItem Header="Вкладка 3">
		TODO
            </dx:DXTabItem>
            <dx:DXTabItem Header="Вкладка 4">
		TODO
            </dx:DXTabItem>
            <dx:DXTabItem Header="Вкладка 5">
		TODO
            </dx:DXTabItem>
        </dx:DXTabControl>
...
Рейтинг: 0 / 0
19.04.2018, 12:54
    #39633108
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Qwe.Qwe1,
не знаю это ли имел ввиду Shocker.Pro, но я бы сделал так- ты биндишь к ViewModel свойство выбранной текущей вкладки SelectedItem,
Itemsourse={Binding Items} у тебя для каждой вкладки остается один и тот же, во ViewModel отслеживаешь изменения SelectedItem и в зависимости от того, какая текущая вкладка подставляешь соответственно нужный Items.
...
Рейтинг: 0 / 0
19.04.2018, 12:55
    #39633110
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Что мешает шаблон для контента вкладки вынести в ресурс?
...
Рейтинг: 0 / 0
19.04.2018, 12:59
    #39633114
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
vb_subне знаю это ли имел ввиду Shocker.Pro, но я бы сделал так- ты биндишь к ViewModel свойство выбранной текущей вкладки SelectedItem,
Itemsourse={Binding Items} у тебя для каждой вкладки остается один и тот же, во ViewModel отслеживаешь изменения SelectedItem и в зависимости от того, какая текущая вкладка подставляешь соответственно нужный Items.Почти. Только я необязательно что-то менять через VM - сами вкладки могут браться тоже из ItemsSource, а не задаваться в кода. По крайней мере для TabControl, не знаю, как насчет DevExpress - автор в первом посте технично умолчал о том, какие элементы он использует, рассказывал про Табконтрол
...
Рейтинг: 0 / 0
19.04.2018, 12:59
    #39633116
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.ProЧто мешает шаблон для контента вкладки вынести в ресурс?
А можно сокращенный набросок кода?
...
Рейтинг: 0 / 0
19.04.2018, 13:04
    #39633124
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Код: xml
1.
2.
3.
<dx:DXTabItem Header="Вкладка 1">
  <ContentPresenter ContentTemplate="{StaticResource MyDataTemplate}" />
</dx:DXTabItem>


Код: xml
1.
2.
3.
<DataTemplate x:Key="MyDataTemplate">
  <ScrollViewer ... 
</DataTemplate>
...
Рейтинг: 0 / 0
19.04.2018, 13:24
    #39633146
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.ProShocker.ProТабконтрол сам является ItemControl-ом, так что можно сам источник вкладок ItemsSource задать через привязку, а потом DataGrid.ItemsSource привязывать к TabControl.SelectedItems.ItemsForDataGrid и задать контент для вкладки в виде шаблона с DataGrid-омТаким образом, ты добьешься как раз того, что будет один грид на все вкладки. Но подумай, нужно ли это тебе. Дело в том, что при переключении вкладок и смене источника данных в этом гриде, у тебя будут теряться вводимые данные (если они не закончены), текущая строка в гриде, текущее состояние скроллера и т.п.

Что вообще ты подразумеваешь под "один и тот же грид"? Может все-таки гриды разные, просто у них одинакое описание столбцов? ну и вынеси его в статический ресурс тогда.
эту проблему я решал след. образом: для каждой вкладки генерировался свой ContentControl, в который синхронизировал шаблоны элементов TabControl'ов. После этого, мне нужно было просто в качество содержимого подставлять этот ContentControl. То визуальное дерево, которое в нём было построено всегда находится в памяти, но не всегда в дереве окна. Состояния объектов, выделения, изменения при этом сохраняются. А переключение становится значительно быстрее, если шаблон TabItem'а внушительный
...
Рейтинг: 0 / 0
19.04.2018, 14:08
    #39633172
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.Pro, а ItemSource, свой для каждой вкладки, то есть грида?
...
Рейтинг: 0 / 0
19.04.2018, 14:37
    #39633205
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Qwe.Qwe1Shocker.Pro, а ItemSource, свой для каждой вкладки, то есть грида?ну так укажи свой Content="{Binding MySource1}" для каждого ContentPresenter-а и привяжись к нему. Или через DataContext
...
Рейтинг: 0 / 0
19.04.2018, 14:39
    #39633208
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Roman Mejtesгенерировался свой ContentControlгенерировался кодом?
...
Рейтинг: 0 / 0
19.04.2018, 14:44
    #39633217
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.Pro, круть ) спасибо.
...
Рейтинг: 0 / 0
19.04.2018, 16:18
    #39633289
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Shocker.Pro,

Вариантов много, 1 из вариантов вот такой:
остается только автоматизировать создание и удаление <TabItem'ов> с заранее созданными элементами урпавления, а не шаблонами. При переключении вкладок шаблоны не очень подходят
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainModel />
    </Window.DataContext>
    <Window.Resources>
        <DataTemplate x:Key="PageTemplate">
            <ListBox ItemsSource="{Binding Items}"/>
        </DataTemplate>
    </Window.Resources>
    <UniformGrid Rows="2">
        <TabControl ItemsSource="{Binding Pages}" ContentTemplate="{StaticResource PageTemplate}">

        </TabControl>
        
        <TabControl>
            <TabControl.Items>
                <TabItem Header="{Binding Pages[0].Name}">
                    <ContentControl Content="{Binding Pages[0]}" ContentTemplate="{StaticResource PageTemplate}"/>
                </TabItem>
                <TabItem Header="{Binding Pages[1].Name}">
                    <ContentControl Content="{Binding Pages[1]}" ContentTemplate="{StaticResource PageTemplate}"/>
                </TabItem>
                <TabItem Header="{Binding Pages[2].Name}">
                    <ContentControl Content="{Binding Pages[2]}" ContentTemplate="{StaticResource PageTemplate}"/>
                </TabItem>
            </TabControl.Items>
        </TabControl>

    </UniformGrid>
</Window>


Код: c#
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.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;

namespace WpfApp4
{
    public class MainModel
    {
        public ObservableCollection<PageModel> Pages { get; } = new ObservableCollection<PageModel>()
        {
            new PageModel(),
            new PageModel(),
            new PageModel(),
            new PageModel()
        };

    }

    public class PageModel
    {
        private static Random _rnd = new Random();
        public string Name { get; } = $"Page {_rnd.Next(0, 50)}";
        public List<string> Items { get; } = Enumerable.Range(_rnd.Next(0,50), _rnd.Next(50, 100)).Select(p => $"Item {p}").ToList();
        public override string ToString() => Name;
    }
}
...
Рейтинг: 0 / 0
19.04.2018, 16:30
    #39633300
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табконтроол и грид
Roman Mejtesостается только автоматизировать создание и удаление <TabItem'ов> с заранее созданными элементами урпавления, а не шаблонами.Я именно так сейчас и сделал, после того, как столкнулся со сбросом состояния при переключениях шаблонов )
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Табконтроол и грид / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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