Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Загрузка данных в disign-time / 25 сообщений из 25, страница 1 из 1
29.04.2019, 10:08
    #39807438
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Всем привет!
В wpf новичок, кодил на Delphi :)
Прошу помощи, не пойму поведения Visual Studio.
Опишу всю свою движуху, по сколько не пойму где косяк.
И так, решил не мелочиться и начать сразу с познания всех фишек идя от простого к более сложного.До чего дошел. Подключил Entity Framework. Scaffold-DbContext - сгенерил модели из существующей базы. Создал прослойку ViewModelBase, конкретные ViewModel наследуются от нее и в них вся движуха. В коде view-шек пустота, в xaml view-шек штатный datagrid. К примеру Binding - PropertiesView является ListCollectionView в соответствующей ViewModel
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<DataGrid Grid.Row="1"
                  Grid.Column="2"
                  ItemsSource="{Binding  PropertiesView,  Mode=OneWay}"                  
                  AutoGenerateColumns="False"
                  IsReadOnly="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Наименование"
                                    Width="400"
                                    Binding="{Binding Path=Name}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>


Все шло хорошо, пока я не заполнил тестовыми данными 10 000+ строк.
Все работает великолепно, скорость отличная, пока я не перезапустил Visual Studio (да, работаю в VS 2019, решил раз уж начинать так со свежачка )) может в ней что не так, но не знаю точно , в других пока не проверял)
Так вот во первых, среда зачем то мне вытаскивает данные находясь в Disign Time, ну в общем в конструкторе , еще до запуска. Т.е. в datagrid при загрузке среды мне тянутся все эти 10к записей и среда намертво виснет. Ждал мин 10-15 терпение кончилось. При этом сам Exe работает отлично, спокойно эти 10к грузит. Удаляю эти 10к записей, перезапускаю среду, она начинает работать адекватно.
Собственно вопрос, как запретить загружать эти данные в режиме разработки или что в обще не так, куда смотреть )
...
Рейтинг: 0 / 0
29.04.2019, 10:20
    #39807447
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdm,

Код: c#
1.
2.
3.
#if DEBUG
   //не загружать данные
#endif
...
Рейтинг: 0 / 0
29.04.2019, 10:25
    #39807450
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
vb_subkill_zdm,

Код: c#
1.
2.
3.
#if DEBUG
   //не загружать данные
#endif


Это я так понимаю для run-time? Сам исполняемый повторюсь, что в дэбаге , что в релизе работает отлично. Сама среда тупит. Работать не возможно.
...
Рейтинг: 0 / 0
29.04.2019, 10:31
    #39807454
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Снимаю вопрос.
Полез в настройки - Инструменты базы данных -Параметры таблиц и запросов и снял галку с переопределить время ожидания там какое то и данные перестали грузиться в режиме разработки в конструкторе.
...
Рейтинг: 0 / 0
29.04.2019, 11:34
    #39807513
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdm,

А хотя это не то, но каким то образом сначала помогло. Это не тот конструктор )) Запустил исполнение из среды и опять начало все загружаться в конструкторе XAML :(

Как с этим бороться?
...
Рейтинг: 0 / 0
29.04.2019, 14:00
    #39807614
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Снять галочку с опции:
Menu -> Tools -> Options... -> XAML Designer -> General -> Enable XAML Designer
наслаждаться жизнью

В VS 2019 XAML код можно менять прямо во время отладки приложения, да и месяца через 2. Сколько работаю, ниразу через дизайнер ничего в XAML коде не менял, в нём шевельнешь чего не так, весь макап поедете чёрт знает куда
...
Рейтинг: 0 / 0
29.04.2019, 15:09
    #39807654
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Roman MejtesСнять галочку с опции:
Menu -> Tools -> Options... -> XAML Designer -> General -> Enable XAML Designer
наслаждаться жизнью

В VS 2019 XAML код можно менять прямо во время отладки приложения, да и месяца через 2. Сколько работаю, ниразу через дизайнер ничего в XAML коде не менял, в нём шевельнешь чего не так, весь макап поедете чёрт знает куда

До этого я то же дошел, но у меня как раз сейчас этап создания с нуля. И мне как раз код View не столько нужен, точнее совсем не нужен, по сколько все в прослойке ViewModel,а вот к XAML довольно часто пока приходится обращаться ...в поиске интерфейса и т.д..
...
Рейтинг: 0 / 0
29.04.2019, 18:16
    #39807826
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Если нужно именно для представления получить признак, что оно в дизайн-моде, то вот

Код: xml
1.
xmlns:compmodel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"


Код: xml
1.
{Binding Path=(compmodel:DesignerProperties.IsInDesignMode)}



(указание свойства Path обязательно, через конструктор не работает)
...
Рейтинг: 0 / 0
29.04.2019, 18:31
    #39807847
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Прошу прощения, может я не совсем еще владею терминами и не корректно задаю вопросы. До запуска еще сборки, до всех движений, просто запуск среды разработки. Она мне выводит во все мои xaml данные, я не знаю как это происходит. К примеру в Delphi такое, если компоненту отвечающему за соединение с БД в дизайнтайме установить connection= true, тогда я еще в режиме проектирования могу видеть данные, тут же все совсем не так, у меня нет компонент визуальных и коннект к контексту данных у меня происходит при запуске приложения или других движухах, но не пока я ни чего не делаю.
...
Рейтинг: 0 / 0
29.04.2019, 18:32
    #39807851
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Визуальность не при чем, оговорился, невизуального компонента коннекта, но сути не меняет
...
Рейтинг: 0 / 0
29.04.2019, 18:34
    #39807852
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Pro,

Или если все же мы пончли друг друга, то пжл подскажите где сие прописывается
...
Рейтинг: 0 / 0
29.04.2019, 19:49
    #39807890
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Судя по всему, ты задаешь модель представления как статический ресурс. Соответственно, когда дизайнер пытается отрендерить твое представление, он создает все ресурсы, в том числе и модель, которая лезет в базу.

Соответственно, ты можешь это учитывать разными способами. Вся зависит от того, когда у тебя модель лезет в БД. Свойство, которое тебе нужно, я написал выше. Можешь использовать его хоть в XAML, хоть в модели представления
...
Рейтинг: 0 / 0
29.04.2019, 20:00
    #39807897
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Pro,
еще плохо ориентируюсь, но вроде статики я не юзаю, рассудите и подскажите.
К примеру, моя работа со справочником свойств.
Разделил
1. Properties.xaml это моя вьюшка
2. PropertiesModel.cs - прослойка между моделью Properties.cs (сгенерирована EntityFrameWork) и вьюшкой Properties.xaml
3. Во вьюшке Properties.xaml объявляю датаконтекст к вьюмодель
...
<UserControl.DataContext>
<vm:PropertiesModel />
</UserControl.DataContext>
...
и биндю
<DataGrid
ItemsSource="{Binding PropertiesView}"
....
4. PropertiesView в бинде это

public ListCollectionView PropertiesView { get; }

вроде ни каких статиков я не юзаю, что я делаю не так
...
Рейтинг: 0 / 0
29.04.2019, 20:07
    #39807902
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
в этой схеме уточню, Properties.cs ни как не относится к Properties.cs вьюшки Properties.XAML, у нее своя Properties.xamlcs. C именами возможно не совсем корректно поступил, но только разбираюсь во всей этой кухне
...
Рейтинг: 0 / 0
29.04.2019, 20:24
    #39807912
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Pro,

куда мне его это свойство пихнуть? неймспейс прописал :) Но я ей богу не понимаю, я один чтоль такой? ни у кого нет 10к записей и они не лезут при загрузке студии?
Вот мой тест xaml целиком
Код: 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.
44.
<UserControl 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"            
             x:Class="Trade4.Pages.Dictonary.View.Properties"
             xmlns:tp="clr-namespace:Trade4.Components"
             xmlns:vm="clr-namespace:Trade4.Pages.Dictonary.ViewModel"
 xmlns:compmodel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"
             mc:Ignorable="d">
    <UserControl.DataContext>
        <vm:PropertiesModel />
    </UserControl.DataContext>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <tp:TopPanel x:Name="tPanel2"
                     Grid.Column="2"
                     Sender="Product" />       
        <DataGrid Grid.Row="1"
                  HorizontalAlignment="Left"
                  Width="400"
                  Grid.Column="2"
                  ItemsSource="{Binding  PropertiesView}"
                  Name="grid1"
                  AutoGenerateColumns="False"
                  IsReadOnly="True"
                  CanUserResizeColumns="False"
                  
                  >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Наименование"
                                    Width="400"
                                    Binding="{Binding Path=Name}">                    
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</UserControl>
...
Рейтинг: 0 / 0
29.04.2019, 20:36
    #39807925
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdm
Код: xml
1.
<vm:PropertiesModel />

вот эта строка создает экземпляр модели. В том числе и при открытии дизайнера
...
Рейтинг: 0 / 0
29.04.2019, 20:37
    #39807928
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdmвроде ни каких статиков я не юзаюДа, в данном случае не статик, но ты же не привел код сразу, поэтому пришлось гадать
...
Рейтинг: 0 / 0
29.04.2019, 20:39
    #39807930
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdmкуда мне его это свойство пихнуть?в данном случае, наверное, проще запретить вьюмодели лезть в БД, если IsInDesignMode


kill_zdmни у кого нет 10к записей и они не лезут при загрузке студии?Обычно никто не грузит 10к записей в грид - это бессмылсенно. Для этого существует пейджинг, фильтры и т.п.
...
Рейтинг: 0 / 0
29.04.2019, 20:41
    #39807931
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Кроме того, у DataGridView есть виртуализация, и ее обязательно надо включить и по умолчанию она выключена. Иначе в рантайме тоже будет тормозить
...
Рейтинг: 0 / 0
29.04.2019, 21:07
    #39807949
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Pro,

Огромное Вам человеческое спасибо!!! я серьезно без иронии. НО.
IsInDesignMode , посмотрел на просторах инета, это мне надо реализовывать этож бред...т.е. скажем я собрался писать что либо, в базе уже есть кол-во записей больше 10к, я еще об этом не знал , реализовал вьюмодели и все упало. КРАСОТА!!!!!!!!!!!!!! в дэлфи у меня таких проблем не было, я контролировал, в режиме разработки, вскывать коннекшн или нет. На крайняк, если забыл False, то это только поменять True на False вне среды... Но все равно познавательно, везде есть свои камни, идем дальше. Еще раз спасибо.
...
Рейтинг: 0 / 0
29.04.2019, 21:09
    #39807951
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Prokill_zdmкуда мне его это свойство пихнуть?в данном случае, наверное, проще запретить вьюмодели лезть в БД, если IsInDesignMode


kill_zdmни у кого нет 10к записей и они не лезут при загрузке студии?Обычно никто не грузит 10к записей в грид - это бессмылсенно. Для этого существует пейджинг, фильтры и т.п.
На счет ни кто не грузит это кстати то же вопрос, разные бывают случаи и я с ними встречался, где и более записей были востребованы, но повторюсь, падает не код, не исполняемый файл, он спокойно отображает эти 10к.. среда фризит мертво
...
Рейтинг: 0 / 0
29.04.2019, 23:47
    #39808033
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdmв дэлфи у меня таких проблем не быловоспользуйся своим же советом kill_zdmбагаж обратной силы, от другого ЯП, привычки и осознание того, как это вроде должно выглядеть или где искать корни -не всегда совпадает с с# и wpf в частностии забудь про дельфи. Ты бы еще SQL-Сервер приплел.
...
Рейтинг: 0 / 0
30.04.2019, 14:02
    #39808307
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
Shocker.Prokill_zdmв дэлфи у меня таких проблем не быловоспользуйся своим же советом kill_zdmбагаж обратной силы, от другого ЯП, привычки и осознание того, как это вроде должно выглядеть или где искать корни -не всегда совпадает с с# и wpf в частностии забудь про дельфи. Ты бы еще SQL-Сервер приплел.
вот в данном ответе в обще ни чего не понял. Забудьте про дэлфи, я уже не там и меня сейчас интересуют проблемы студии. Дэлфи был для контекста и поддержки разговора, а главное, что бы оценить, что проблема именно в среде, по сколько в другоой, таких проблем нет.
Повторюсь. Вопрос - я в среде VS - она мне пытается загрузить все данные в конструторе XAML и умирает при этом. Как от этого избавится.
...
Рейтинг: 0 / 0
30.04.2019, 16:01
    #39808385
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdm,

не грузить ViewModel в XAML.

Это происходит, вот по этой причине:
Код: c#
1.
2.
3.
    <UserControl.DataContext>
        <vm:PropertiesModel />
    </UserControl.DataContext>



Попробуйте сделать вот так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Window x:Class="WpfApp3.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:WpfApp3"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    
    <d:Window.DataContext>
        <local:MockViewModel/>
    </d:Window.DataContext>

    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
    
    <Grid>
        <ListBox ItemsSource="{Binding Items}"/>
    </Grid>
</Window>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class ViewModel : IMyModel
{
    public List<string> Items { get; } = Enumerable.Range(0, 100000).Select(p => $"Item {p}").ToList();
}
public class MockViewModel : IMyModel
{
    public List<string> Items { get; } = Enumerable.Range(0, 10).Select(p => $"Item {p}").ToList();
}
...
Рейтинг: 0 / 0
30.04.2019, 19:15
    #39808532
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных в disign-time
kill_zdmвот в данном ответе в обще ни чего не понял. Забудьте про дэлфи, я уже не там и меня сейчас интересуют проблемы студии. Дэлфи был для контекста и поддержки разговора, а главное, что бы оценить, что проблема именно в среде, по сколько в другоой, таких проблем нет.
Повторюсь. Вопрос - я в среде VS - она мне пытается загрузить все данные в конструторе XAML и умирает при этом. Как от этого избавится.На вопрос, как от этого избавиться, я ответил выше и считал, что вопрос исчерпан, далее пошла философия о том, что не надо парадигмы одного фреймворка натягивать на другой.
Роман предложил другой вариант, для меня это некоторая новость, и это, видимо, логично
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Загрузка данных в disign-time / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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