Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174

Крашится программа при подключении Data Context

27.09.2023, 18:19. Показов 2542. Ответов 67
Метки нет (Все метки)

Доброго времени суток, пишу я спокойно себе разметку, никого не трогаю и тут в один прекрасный момент при сборке вылетела ошибка, которую на протяжении нескольких часов я никак не могу решить.
В чем суть, как я понял, если я добавляю на страницу Page111 Data Context MainViewModel и оставляю все так как на первом скриншоте, то вылетает ошибка.
А если я убираю DataContext, то все загружается нормально
При этом, если я убираю Content = new Page111() и оставляю в XAML Data Context, то тоже все загружается нормально.
А самое интересное в том, что у меня все до этого работало прекрасно, пока я не начал писать ItemControl для DockPanel.
Уже голову себе всю сломал, подскажите, в чем дело)

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
internal partial class MainViewModel
{
 
    [ObservableProperty] private ObservableCollection<Client> _clients = new();
    [ObservableProperty] private ObservableCollection<TabItem> _tabItems = new();
    [ObservableProperty] private ObservableCollection<ScreenShotModel> _screenShots = new();
 
 
 
 
 
    public MainViewModel()
    {
        ApplicationContext db = new();
 
        var users = db.Clients;
 
 
        foreach (var client in users)
        {
            Clients.Add(client);
        }
 
        TabItems.Add(
            new TabItem
            {
                Title = "89156347371",
                Content = new Page111(),
            }
        );
 
        ScreenShots.Add(new ScreenShotModel
        {
            Title = $"Скриншот",
            ImgSours = "Regular_FileImage",
            Text = "",
        });
 
    }
 
 
 
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
internal class TabItem : ObservableRecipient
{
    private string _title;
    private Page111 _content;
 
    public string Title
    {
        get => _title;
        set => SetProperty(ref _title, value);
    }
 
    public Page111 Content
    {
        get => _content;
        set => SetProperty(ref _content, value);
    }
}
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<Page x:Class="ChipTunningApp.Views.Windows.TabControl"
      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" 
      xmlns:fa="http://schemas.fontawesome.com/icons/"
      xmlns:view="clr-namespace:ChipTunningApp.ViewModels.MainViewModel"
      xmlns:models="clr-namespace:ChipTunningApp.Models"
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      Title="TabControl1xaml">
 
    <Page.DataContext>
        <view:MainViewModel></view:MainViewModel>
    </Page.DataContext>
 
    <Grid>
        <ScrollViewer>
            <StackPanel>
                <DockPanel  Height="85" Dock="Top" Margin="10 10 10 30">
                    <UniformGrid Rows="2" Columns="6">
                        <TextBlock Text="Имя клиента" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBlock Text="Номер клиента" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBlock Text="Номер авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBlock Text="Марка авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBlock Text="Модель авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBlock Text="Проблема" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
                        <TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
                        <TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
                        <TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
                        <TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
                        <TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
                        <CheckBox HorizontalAlignment="Center" Margin="0 8 0 0" BorderThickness="3"/>
                    </UniformGrid>
                </DockPanel>
                <DockPanel Margin="0 0 0 30">
                    <TextBlock Text="Скриншоты" HorizontalAlignment="Center" Height="30" FontSize="20" FontWeight="Bold"/>
                </DockPanel>
                <StackPanel Orientation="Horizontal">
                    <Grid Height="250">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                        </Grid.ColumnDefinitions>
                        <DockPanel Grid.Column="0" Margin="30 10 10 10">
                            <ItemsControl ItemsSource="{Binding ScreenShots}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel>
                                            <fa:ImageAwesome Icon="{Binding ImgSours}" Height="100" Width="100"/>
                                            <TextBox Text="{Binding Text}" Width="100" Height="100"></TextBox>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DockPanel>
                    </Grid>
                </StackPanel>
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Page>
Миниатюры
Крашится программа при подключении Data Context   Крашится программа при подключении Data Context  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2023, 18:19
Ответы с готовыми решениями:

Крашится БД при подключении через ADO
Уважаемые знатоки, Есть база dbmain.accdb, подключаюсь к ней с разных машин из VBA (excel,access) (виртуалки, расшаренная папка) через...

Программа крашится при ALT+F4
Добрый день. В своей игре я использую вычислительные шейдеры, которые требуют очищения через функцию ComputeBuffer.Dispose() я не...

Программа крашится при нажатии Y
uses ABCObjects,GraphABC; var Font_Game:string; new_game,bot_game,exit_game:TextABC; s_g,b_g:boolean; Procedure...

67
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 15:23  [ТС]
Элд Хасп, я просто пришел с JavaScript на C#

Добавлено через 4 минуты
Я сегодня постараюсь сделать команды для взаимодействия с БД, если будет возможность, поглядите, пожалуйста))
Некому поставить на путь истинный)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 16:04
Цитата Сообщение от AndreyXP Посмотреть сообщение
я просто пришел с JavaScript
Там ООП слабый. Или возможно, как на Формах, большинство разработчиков его игнорируют.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 20:55  [ТС]
Элд Хасп

Я тут пишу бизнес логику для отправки, редактирования, получения данных в БД и нужен Ваш совет.
Для получения и редактирования данных в принципе все понятно как тут быть, вопрос с отправкой.

Я создал 1 метод со всеми параметрами из страницы заполнения данных, который будет заниматься отправкой данных в БД.

Как мне лучше теперь делать? Может создать еще одну модель, которая будет хранить в себе все поля? Типо имени, телефона и остальными данными, которые будет вводить пользователь. При нажатии кнопки сохранить, будет вызываться метод отправки данных в БД и аргументы будет уже брать с этой промежуточной модели данных. Делать выборку и объединение не вариант, я обдумывал это, при создании нового пользователя, как мне кажется, будет бред. Получать данные с БД это уже делать в отдельном методе бизнес логики все необходимые сортировки, фильтрации и прочее и создавать новую промежуточную модель с данными, которая будет уходить в коллекцию, которая отвечает за кол-во вкладок (На Вашем примере коллекция Vehicle)
Ну и редактирование по той же схеме, что и получение. А вот с отправкой вопросы) Как думаете, промежуточная модель - это норм? Какие еще есть способы реализации? Если есть статьи - скинь пожалуйста. Только у меня довольно сложная для меня модель... Нужен Ваш совет)


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

Как-то так

Или это бред и есть нормальные варианты реализации?

Я просто не понимаю, что нужно делать, это единственный вариант, до которого я дошел
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 21:34
AndreyXP, предлагаю вам несколько "отступить назад". Самая главная ошибка в ваших рассуждениях, на мой взгляд, в том, что вы "думает от View". А главная часть приложения это Модель. В данной задаче это класс ApplicationContext.

Для учебного примера давайте для начала возьмём какую-то таблицу не имеющую ссылок на другие таблицы. Например - Client. Сделаем правильную реализацию для неё, а потом вы будете это интерпретировать на другие таблицы.

Начальная часть у вас уже реализована - есть вывод списка клиентов.
Что вы хотите добавить по функционалу ещё? Как я думаю: добавление/удаление/редактировании. Верно?
Что-то ещё?
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 21:43  [ТС]
Есть программа, левая часть, где выводится список клиентов, его сортировка и удаление из БД
Так же есть кнопка добавления нового клиента, открывается пустая вкладка с правой части программы, вносятся данные и отправляются в БД
При нажатии на ListBoxItem, открывается новая вкладка в правой стороне, где будет выводиться информация о визите клиента, которую можно отредактировать
Примерно как-то так

Добавлено через 4 минуты
Желательно ещё при нажатии на иконку скриншота делать скриншот по выделенной области и сохранять в памяти, при этом вместо иконки показывать сам скриншот, после сохранения данных о визите, сохранять скриншот в папку клиента, а в БД отправить на неё ссылку string
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 21:50
Цитата Сообщение от AndreyXP Посмотреть сообщение
выводится список клиентов, его сортировка и удаление из БД
Так как список клиентов загружается полностью в память, то сортировку лучше делать используя CollectionView.

Но для начала нужно добавить инициализацию Таблицы демо данными. Сможете это сделать?

Добавлено через 1 минуту
Вот здесь я об этом писал:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Делается это либо с помощью инициализаторов см. Инициализация базы данных | C# Entity Framework 6.
Либо "вручную" в методе OnModelCreating: Присвоение начальных значений данных
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 21:52  [ТС]
Хорошо, с получением данных разобрались, а как отправлять данные лучше ? Всё по отдельности или как это вообще работает?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 22:14
Цитата Сообщение от AndreyXP Посмотреть сообщение
а как отправлять данные лучше ?
Какие и куда?
Для начала реализуйте, то что я написал выше и сделайте синхронизацию, чтобы я мог посмотреть.
Или по вечерам вы не можете со Студией работать?
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 22:23  [ТС]
Элд Хасп, Могу, но я каждый день с 7 утра и часов до 20 за ней сижу)
Завтра продолжу и попробую реализовать )
Спасибо большое!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 22:29
del

Добавлено через 1 минуту
Цитата Сообщение от AndreyXP Посмотреть сообщение
но я каждый день с 7 утра и часов до 20 за ней сижу)
У меня к сожалению, только дома доступ к Студии.
Завтра, возможно, на работу не пойду и сможем днём коммуницировать.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
29.09.2023, 22:30  [ТС]
Было бы не плохо, если бы помогли
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 23:48
AndreyXP, по интерфейсу Форума:
 Комментарий модератора 
При обращении к другому пользователю указывайте его ник в тегах [NICK][/NICK] или цитируйте часть сообщения на которое отвечаете.
В противном случае ему не придёт уведомление о вашем обращении и вы можете не дождаться ответа на своё сообщение.

Для вставки ника: введите ник, выделите его и нажмите кнопку "Динамик" на панели редактора сообщений.
Или кликните по нику автора сообщения в панели слева от текста его сообщения.

Для вставки цитаты: выделите нужную цитату, должна появиться всплывающая кнопка "Цитировать", нажмите её.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
29.09.2023, 23:52
AndreyXP, добавил ветку "eldhasp" в "ChipTunningApp1" и в ней фиксация:
Добавлено: начальные данные для таблицы клиентов, динамическая фильтрация клиентов, удаление клиентов, сохранение изменений после удаления.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
30.09.2023, 09:51  [ТС]
Элд Хасп, пожалуйста, используйте проект ChipTunningApp, я в нем работаю
Сейчас попробую Ваши изменения перенести в этот проект и потестить
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
30.09.2023, 09:55
Цитата Сообщение от AndreyXP Посмотреть сообщение
используйте проект ChipTunningApp, я в нем работаю
У меня уже готовая фиксация была для "1" - переносить сам не стал.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
30.09.2023, 10:07
Добавил ветку в основной реп.
Цитата Сообщение от AndreyXP Посмотреть сообщение
C#
50
    public string VisitedAt { get; set; } // Время визита
Почему время в стринге, а не в DateTime?

Так же очень много предупреждений о не заданных значениях для ненулевых ссылочных полей:


Это всё устранять надо, если мы говорим о том, что вы хотите создать КАЧЕСТВЕННЫЙ код.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
30.09.2023, 10:23
Цитата Сообщение от AndreyXP Посмотреть сообщение
C#
20
[ObservableProperty] private ObservableCollection<TabItem> _tabItems = new();
За исключением редчайших случаев, ObservableCollection - должно быть в свойстве только для чтения:
C#
20
21
22
23
24
25
26
    public ObservableCollection<Client> Clients { get; }
    public ObservableCollection<TabItem> TabItems { get; }
    public ObservableCollection<ScreenShotModel> ScreenShots { get; }
 
    //[ObservableProperty] private ObservableCollection<Client> _clients = new();
    //[ObservableProperty] private ObservableCollection<TabItem> _tabItems = new();
    //[ObservableProperty] private ObservableCollection<ScreenShotModel> _screenShots = new();
Добавлено через 4 минуты
Цитата Сообщение от AndreyXP Посмотреть сообщение
C#
60
   _screenShots.Add(new ScreenShotModel
К полям хранящим значение свойств, можно обращаться только в теле их свойств.
В любом другом месте обращаемся ТОЛЬКО К СВОЙСТВУ!

C#
60
        ScreenShots.Add(new ScreenShotModel
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
30.09.2023, 10:37  [ТС]
Элд Хасп, я уже почти все перенес в ветку Test, почему для страницы db.Context Vehicle?
Ведь основная информация будет находится именно в db.Visit, от него можно перейти уже к Vehicle, ибо у одного визита есть только одна машина
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
30.09.2023, 10:46
Цитата Сообщение от AndreyXP Посмотреть сообщение
C#
1
... = null!;
Вот это тоже плохая практика. Вместо исправления неверного кода - маскируете его.
В каких-то единичных, исключительных случая это можно делать.
Но у вас массово это применяется по всему коду.

Добавлено через 2 минуты
Цитата Сообщение от AndreyXP Посмотреть сообщение
я уже почти все перенес в ветку Test,
У меня она не отличается от мастера.

Добавлено через 4 минуты
Цитата Сообщение от AndreyXP Посмотреть сообщение
я уже почти все перенес в ветку Test, почему для страницы db.Context Vehicle?
Я не знаю полностью логику вашего приложения и не вникал в неё.
Чисто по коду: слева у вас список клиентов. В каждом есть список public List<Vehicle> Vehicles { get; set; }. При выборе клиента, как-то логично предположить, что нужно отобразить именно его список Vehicle.

Соответственно, каждая вкладка - отображает один Vehicle.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
30.09.2023, 10:47  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У меня она не отличается от мастера.
Я еще не загружал изменения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2023, 10:47

Ошибка при подключении firebird в Entity Data Model
Уважаемые Гуру! Сделал подключение к firebird из VisualStudio 2010, пытаюсь создать Entity Data Model, но получаю ошибку &quot;Unable to...

Свертывание матрицы, программа крашится при N > 2
программа крашится, если вводить n больше чем 2, как починить? #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; extern double...

Программа крашится при вводе данных
Вот этот код скопирован из учебника. На моем компьютере почему то запускается программа но при вводе 1.2 3.4 5.6| просто выключается и все....

Крашится программа при переходе в userparamsActivity
программа вылетает сразу после перехода в этот активити Лог выдает ошибку: Caused by: java.lang.NullPointerException: Attempt to...

Программа компилируется, но при выполнении крашится
Задача состоит в том, чтобы заполнить массив t1 случайными числами, а после задать каждому элементу массива t2 значение, которое является...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru