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

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

27.09.2023, 18:19. Показов 2615. Ответов 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
01.10.2023, 10:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AndreyXP Посмотреть сообщение
Кстати, неплохая идея...
Это современный стандарт технологии продаж: Лид - Квалификация - Встреча - Продажа. И на каждой стадии должна происходить фиксация информации.
0
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174
01.10.2023, 10:34  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это современный стандарт технологии продаж: Лид - Квалификация-Встреча-Продажа. И на каждой стадии должна происходить фиксация информации.
Я в этом еще не прошарен, мне очень тяжело все это дается...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru