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

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

27.09.2023, 18:19. Показов 2828. Ответов 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
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2023, 10:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AndreyXP Посмотреть сообщение
Кстати, неплохая идея...
Это современный стандарт технологии продаж: Лид - Квалификация - Встреча - Продажа. И на каждой стадии должна происходить фиксация информации.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
01.10.2023, 10:34  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это современный стандарт технологии продаж: Лид - Квалификация-Встреча-Продажа. И на каждой стадии должна происходить фиксация информации.
Я в этом еще не прошарен, мне очень тяжело все это дается...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2023, 10:41
Цитата Сообщение от AndreyXP Посмотреть сообщение
нажимая на каждого клиента, у него открываются одинаковые вкладки
Как одинаковые? Разные же? У каждого вкладки со своими ТС.

Или вы имеет ввиду, что у одного клиента все вкладки с одинаковыми ярлыками?
Ну, так в ярлыке выводится имя клиента. Измените визуализацию ярлыка как вам нужно. Например задайте вывод номера TC.

Добавлено через 3 минуты
Цитата Сообщение от AndreyXP Посмотреть сообщение
Я в этом еще не прошарен, мне очень тяжело все это дается...
Это предметная область.
Для того чтобы создать приложение, нужно сначала полное нормальное ТЗ.
Его даёт либо заказчик (на практике исключительно редко такое бывает), либо сам разработчик хорошо разбирается в предметной области заказника и полностью сам составляет ТЗ (тоже довольно редкий случай), либо ТЗ составляется совместными усилиями заказчика и разработчика. Последнее это наиболее типично, но требует от разработчика хотя бы поверхностного знания предметной области заказчика.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
01.10.2023, 10:43  [ТС]
Элд Хасп, Вы мне подсказали очень неплохую реализацию приложения, спасибо за Ваш труд! Теперь я понял многое! Вы профессионал своего дела! Моя структура была не очень, но Ваша… она топ!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2023, 11:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Измените визуализацию ярлыка как вам нужно.
Сделал вывод рег. номера в ярлыке. Посмотрите последнюю фиксацию.

Добавлено через 7 минут
AndreyXP, смотрите ещё на такую особенность реализации.
Вы добавляете ТС клиенту. Он добавляется в навигационное свойство Client.Vehicles. Но это обычный лист. И обновления представления не произойдёт.
Решения два:
- Заменить лист на ObservableCollection. Но получается в зависимости "от капризов" View нужно менять Репозиторий. Например, для Форм потребуется уже BindingList. Это не есть хорошо;
- Не использовать свойство Client.Vehicles, а получать динамически нужные Vehicles для текущего клиента. В данном случае, так как все Vehicles уже загружены в ViewModel, это можно сделать с использованием фильтрации по SelectedClient. Но потребует немного манипуляций по прослушиванию свойства SelectedClient.

Чуть позже скину реализацию.

Добавлено через 16 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чуть позже скину реализацию.
XML
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    <Grid>
        <Grid.Style>
            <Style TargetType="Grid">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedClient}"
                                 Value="{x:Null}">
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>   
        </Grid.Style>
        <TextBox Text="{Binding SelectedClient.Id, FallbackValue=''}" Visibility="Hidden"
                   TextChanged="OnSelectedClientChanged"/>
        <TabControl x:Name="tCtrl" Grid.Row="1"
                    ItemsSource="{Binding Vehicles}"
                    SelectedItem="{Binding SelectedVehicle}"
                    SelectedIndex="0">
C#
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public partial class VehiclesPage : UserControl
    {
        public VehiclesPage()
        {
            InitializeComponent();
        }
 
        private void OnSelectedClientChanged(object sender, TextChangedEventArgs e)
        {
            MainViewModel vm = (MainViewModel) DataContext;
            if (vm.SelectedClient is Client client)
            {
                tCtrl.Items.Filter = obj =>
                    obj is Vehicle vehicle &&
                    vehicle.Client == client;
                tCtrl.SelectedIndex = 0;
            }
        }
    }
Фиксация:
Изменена реализация подтягивания транспорта для клиента.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
01.10.2023, 11:43
AndreyXP, добавил реализацию "+" для новых вкладок. Это близко к типичному, привычному для современных пользователей.


C#
55
56
57
58
59
60
61
62
63
64
65
66
    [RelayCommand(CanExecute = nameof(CanNewVehicle))]
    private void NewVehicle(Client client)
    {
        Vehicle @new = new Vehicle
        {
            Client = client,
            RegistrationNumber = "qwertyuiop",
            Configuration = "Люкс"
        };
        Vehicles.Add(@new);
        SelectedVehicle = @new;
    }
XML
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
    <d:UserControl.DataContext>
        <vms:MainViewModel>
            <!--Пример задания значения свойству VM для режима разработки-->
            <vms:MainViewModel.SelectedClient>
                <db:Client Id="12"/>
            </vms:MainViewModel.SelectedClient>
        </vms:MainViewModel>
    </d:UserControl.DataContext>
 
    <UserControl.Resources>
        <CollectionViewSource x:Key="cvs" Source="{Binding Vehicles}"/>
        <TabItem x:Key="addTab" Header="+"/>
 
        <CompositeCollection x:Key="tabs">
            <CollectionContainer Collection="{Binding Source={StaticResource cvs}}"/>
            <StaticResource ResourceKey="addTab"/>
        </CompositeCollection>
    </UserControl.Resources>
 
    <Grid>
        <Grid.Style>
            <Style TargetType="Grid">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedClient}"
                                 Value="{x:Null}">
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Grid.Style>
 
        <!--Прокси элемент для определения момента изменения SelectedClient-->
        <TextBox Text="{Binding SelectedClient.Id, FallbackValue=''}" Visibility="Hidden"
                   TextChanged="OnSelectedClientChanged"/>
 
        <TabControl x:Name="tCtrl" Grid.Row="1"
                    ItemsSource="{Binding Source={StaticResource tabs}}"
                    SelectedItem="{Binding SelectedVehicle}"
                    SelectedIndex="0"
                    SelectionChanged="OnTabSelected">
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
44
45
46
using ChipTunningApp.DataBase;
using ChipTunningApp.ViewModels.MainViewModel;
using System.Windows.Controls;
using System.Windows.Data;
 
namespace ChipTunningApp.Views.Windows
{
    /// <summary>
    /// Логика взаимодействия для VehiclesPage.xaml
    /// </summary>
    public partial class VehiclesPage : UserControl
    {
        private readonly CollectionViewSource cvs;
        private readonly TabItem addTab;
        public VehiclesPage()
        {
            InitializeComponent();
            cvs = (CollectionViewSource)Resources[nameof(cvs)];
            addTab = (TabItem)Resources[nameof(addTab)];
        }
 
        private void OnSelectedClientChanged(object sender, TextChangedEventArgs e)
        {
            MainViewModel vm = (MainViewModel)DataContext;
            if (vm.SelectedClient is Client client)
            {
                cvs.View.Filter = obj =>
                    obj is Vehicle vehicle &&
                    vehicle.Client == client;
                tCtrl.SelectedIndex = cvs.View.IsEmpty ? -1 : 0;
            }
        }
 
        private void OnTabSelected(object sender, SelectionChangedEventArgs e)
        {
            if(tCtrl.SelectedItem == addTab) 
            {
                MainViewModel vm = (MainViewModel)DataContext;
                if (vm.NewVehicleCommand.CanExecute(vm.SelectedClient))
                {
                    vm.NewVehicleCommand.Execute(vm.SelectedClient);
                }
            }
        }
    }
}
Отправил фиксацию: Вкладка "Плюс".
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
02.10.2023, 08:45  [ТС]
Элд Хасп, Доброе утро, спасибо Вам за вашу поддержку.
За эти выходные я очень долго думал над грамотной структурой и немножко поизучал EF и понял, что знаний у меня совершенно не хватает, отсюда и проблемы с приложением в частности

Я хочу продемонстрировать структуру, оцените пожалуйста и подправьте по необходимости

Итак, список всех клиентов, а так же все кнопки под ним остаются без изменений, главные изменения уже идут на правую часть приложения.
1) Добавляем нового пользователя, там достаточно номер телефона и имя (Номер телефона важнее, по нему все сортировки и т.д.)
2) После добавления нового пользователя, нажимаем на ListBox, выбираем его и у нас есть 2 2 кнопки - добавить и редактировать
Нажав на добавить, мы открываем новую вкладку (верхнего уровня, с Title - номер телефона), а внутри открывается вкладка нижнего уровня(Т.е. внутри вкладки верхнего уровня может разместиться несколько вкладок уже с информацией самого клиента) там будет Имя и номер нашего клиента, а под ним список его транспортных средств, если их нет, то мы можем его добавить новое Т.С.. Нажимаем, открывается вкладка с информацией О Т.С. Заполнили, сохранили, закрыли вкладку, под именем клиента появляется список его машин, справа от него появляется список визитов именно для этого Т.С. (Пустой, если визитов у ТС нет). К этому ТС мы можем добавить новый визит. Нажимаем, открывается новая вкладка с полями для заполнения визита. Сохраняем, с списке ТС появляется item его визита

Редактирование будет происходить примерно по такому же сценарию.

Я описал все очень условно, если есть возможность, подправьте, пожалуйста
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
02.10.2023, 14:55
Цитата Сообщение от AndreyXP Посмотреть сообщение
1) Добавляем нового пользователя, там достаточно номер телефона и имя (Номер телефона важнее, по нему все сортировки и т.д.)
Из практики использования (если вы делаете не учебное задание), то требуется ещё поле (или даже несколько) для комментариев. Чтобы менеджер не где-то на листочке фиксировал информацию, а в общей БД.

Цитата Сообщение от AndreyXP Посмотреть сообщение
открываем новую вкладку (верхнего уровня, с Title - номер телефона), а внутри открывается вкладка нижнего уровня
Визуально это будет восприниматься ужасно. Не желательно делать одновременно видными вкладки разных уровней.

Теперь по самой концепции работы с многоуровневными данными.
В данном случае: Клиенты -> ТС клиента -> Визиты по этому ТС.
Работа с первым уровнем: Список клиентов слева, справа подробная информация по клиенту и короткий список (или вкладки) с его ТС.
При выборе ТС нужно показать более подробную информаwb. по ТС и список визитов.
Но нужно ли в это время видеть список всех клиентов?
Нет же необходимости переключаться из Визита, сразу на другого клиента.

Поэтому когда происходит переход на работу с клиентом, список клиентов нужно скрыть.
Допустим, имя клиента вывести в титул Окна. Рядом сним срелку возврата (на предудущее представление).
И пока работаем с Клиентом, у нас тоже будет только двухуровневое представление: Список ТС и Список Визитов по выбранному ТС.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2023, 14:55

Ошибка при подключении 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 значение, которое является...


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

Или воспользуйтесь поиском по форуму:
68
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru