Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Кэширование в ContentControl / 6 сообщений из 6, страница 1 из 1
03.11.2021, 16:27
    #40109009
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
День добрый. Для динамического создания контролов, использую такой код:
Код: 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.
<ContentControl>
    <ContentControl.Style>
        <Style TargetType="ContentControl">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedMenu.Model.MenuType}" 
                             Value="{x:Static enums:MenuTypeEnum.Lot}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <mainData:OfferContentDataControl 
                                    DataContext="{Binding DataContext.OfferContentData, 
                                                          RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding SelectedMenu.Model.MenuType}" 
                             Value="{x:Static enums:MenuTypeEnum.ProductCard}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <productCards:ProductCardsControl 
                                    DataContext="{Binding DataContext.ProductCardsDataContext, 
                                                          RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>                
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>


Проблемка в следующем: каждый раз, когда меняется SelectedMenu.Model.MenuType, происходит пересоздание контрола. Как избежать подобное? Буду рад любым советам, замечаниям.
Заранее, спасибо!
...
Рейтинг: 0 / 0
04.11.2021, 15:11
    #40109221
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
Супер_Пав,

ContentControl Умеет отображать как шаблоны данных, так и сами элементы (inline, так сказать)
по этому, тебе надо создать отображаемые элементы и менять их в ContentControl, тогда отображаемые и переключаемые объекты всегда будут загружены и их состояние будет сохраняться.
...
Рейтинг: 0 / 0
04.11.2021, 16:17
    #40109247
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
Roman Mejtes
Супер_Пав,

ContentControl Умеет отображать как шаблоны данных, так и сами элементы (inline, так сказать)
по этому, тебе надо создать отображаемые элементы и менять их в ContentControl, тогда отображаемые и переключаемые объекты всегда будут загружены и их состояние будет сохраняться.

сделал конвертер с 2мя статик полями (2 контрола), в зависимости от состояния MenuType вывожу 1й или 2й. Проблема решилась. но хотелось какое-то решение на уровне xaml
...
Рейтинг: 0 / 0
04.11.2021, 16:44
    #40109259
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
Супер_Пав,
Код: 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.
<Window x:Class="WpfApp20.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:local="clr-namespace:WpfApp20"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <ListBox x:Key="FirstListBox">
            <ListBoxItem>Синий</ListBoxItem>
            <ListBoxItem>Красный</ListBoxItem>
            <ListBoxItem>Зеленый</ListBoxItem>
        </ListBox>
        <ListBox x:Key="SecondListBox">
            <ListBoxItem>Теплый</ListBoxItem>
            <ListBoxItem>Холодный</ListBoxItem>
            <ListBoxItem>Мягкий</ListBoxItem>
        </ListBox>
    </Window.Resources>
    <DockPanel LastChildFill="True">
        <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
            <RadioButton x:Name="PART_Color" Content="Цвета" GroupName="ControlSelector" IsChecked="True"/>
            <RadioButton Content="Свойства" GroupName="ControlSelector"/>
        </StackPanel>
        <ContentControl x:Name="PART_Content">
            <ContentControl.Style>
                <Style TargetType="{x:Type ContentControl}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=PART_Color, Path=IsChecked}" Value="True">
                            <Setter Property="Content" Value="{StaticResource FirstListBox}"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=PART_Color, Path=IsChecked}" Value="False">
                            <Setter Property="Content" Value="{StaticResource SecondListBox}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </DockPanel>
</Window>
...
Рейтинг: 0 / 0
04.11.2021, 16:45
    #40109261
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
можно просто сделать свой contentcontrol, который будет хранить инстансы контролов у себя в памяти и переключать их через DP, по номеру. к примеру. делал так. как то, но задача была несколько иной
...
Рейтинг: 0 / 0
05.11.2021, 13:25
    #40109390
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование в ContentControl
Роман, спасибо за советы и решение!
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Кэширование в ContentControl / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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