Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
4 / 4 / 1
Регистрация: 15.04.2017
Сообщений: 346
.NET 7

Как сделать чат .net maui с применением mvvm?

27.07.2023, 07:51. Показов 2594. Ответов 31

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу чат на .net maui между человеком и ботом, все сообщения пишутся в бд , одна стро в бд это сообщение человека и бота.
Как мне сделать структуру в mvvm и сделать привязку?
У меня есть stacklayout в котором есть два label, 1 label это сообщение пользователя, 2 label это ответ бота.
Как мне зациклить и подгрузить все строки из бд с помощью mvvm?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2023, 07:51
Ответы с готовыми решениями:

MAUI, c#, MVVM, ListView, долгая отрисовка элементов
Доброго времени суток всем. У меня программа на платформе MAUI с паттерном MVVM, делаю сейчас для Android и возникает проблема с...

Как обработать событие в textbox с применением паттерна mvvm
Есть у меня textbox у него есть событие FocusableChanged как мне его обработать в класе viewmodel?

MAUI Как сделать страницу в единственном экземпляре
Всем привет! Мне необходимо, чтобы страница была реализована в единственном экземпляре. Страница подразумевает под собой журнал с записями,...

31
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
27.07.2023, 12:11
Студворк — интернет-сервис помощи студентам
Midian, Вот так будет надёжнее и правильнее
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
47
48
49
50
private readonly IWindowService _windowService;
private readonly IBackgroundTaskQueue _taskQueue;
private readonly IMainDA _mainDA;
 
private SynchronizationContext _viewContext;
public SynchronizationContext ViewContext
{
    get => _viewContext;
    set
    {
        if (Set(ref _viewContext, value))
        {
            if (ViewContext != null)
                // Грузим данные для окна, сервис выше по теме
                _taskQueue.QueueBackgroundWorkItem(LoadVMDataAsync);
        }
    }
}
 
public WeldingWeldersWindowVM(IWindowService windowService,
                              IBackgroundTaskQueue taskQueue,
                              IMainDA mainDA)
{
    _windowService = windowService;
    _taskQueue = taskQueue;
    _mainDA = mainDA;
}
 
private async Task LoadVMDataAsync()
{
    List<OGSWelder> welders = new List<OGSWelder>();
 
    try
    {
        welders = await _mainDA.WeldingDA.GetWeldersDataAsync();
 
        ViewContext.Post(vc =>
        {
            if (Welders.Count > 0)
                Welders.Clear();
 
            if (welders.Count > 0)
                welders.ForEach(w => Welders.Add(w));
        }, null);
    }
    catch (Exception ex)
    {
        _windowService.ShowErrorMessage(ex.Message, "Ошибка");
    }
}
0
 Аватар для Midian
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,702
27.07.2023, 12:30
Посмотрел в MAUI свой класс есть для main thread https://learn.microsoft.com/en... ain-thread

Добавлено через 1 минуту
BOEHKOMAT,
Замените на вот это:
C#
1
2
3
4
5
6
public async Task GetInfo()
{
    var a = await UserServices.GetAllLog();
    
    await MainThread.InvokeOnMainThreadAsync(() => a.ForEach(_ => SourceLog.Add(_)));
}
1
4 / 4 / 1
Регистрация: 15.04.2017
Сообщений: 346
27.07.2023, 12:37  [ТС]
Midian, к сожалению, нету.
0
 Аватар для Midian
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,702
27.07.2023, 12:37
Andrey-MSK, Ну можно и так, но в данном случае мы не ждем результата от метода, поэтому запустив метод мне все равно что он там сделает, отвалится или отработает корректно, в случае падения - просто показываем ошибку, либо записываем в лог, в случае успеха - увидим в окне результат... как и писал выше, в таких методах я обычно делаю еще свойство Busy, начав грузить данные я блокирую UI и показываю анимацию, в блоке finaly Busy = false и в случае exception в блоke catch я вызываю MessageBox с ошибкой юзверю, либо просто логирую, если мне не важно как он там отработал
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
27.07.2023, 12:38
BOEHKOMAT, Сделайте через SynchronizationContext, я вам ссылку на пример давал. Это должно работать на любых UI.
0
 Аватар для Midian
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,702
27.07.2023, 12:38
BOEHKOMAT,
Так попробуйте
C#
1
2
3
4
5
6
public async Task GetInfo()
{
    var a = await UserServices.GetAllLog();
    
    await MainThread.InvokeOnMainThreadAsync(() => a.ForEach(_ => SourceLog.Add(_)));
}
0
4 / 4 / 1
Регистрация: 15.04.2017
Сообщений: 346
27.07.2023, 12:40  [ТС]
Andrey-MSK, попробую и так, как предложили Вы.
0
4 / 4 / 1
Регистрация: 15.04.2017
Сообщений: 346
27.07.2023, 12:43  [ТС]
Midian, а какая библиотека содержит ForEach метод?
Миниатюры
Как сделать чат .net maui с применением mvvm?  
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
27.07.2023, 12:44
Цитата Сообщение от BOEHKOMAT Посмотреть сообщение
а какая библиотека содержит ForEach метод?
Это метод коллекции List

Вот так подключается контекст в xaml.cs нужного окна
C#
1
2
3
4
5
6
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    IWeldingWeldersWindowVM vm = (IWeldingWeldersWindowVM)DataContext;
 
    vm.ViewContext = SynchronizationContext.Current;
}
0
 Аватар для Midian
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,702
27.07.2023, 12:45
BOEHKOMAT, это extension, обычно есть в DevExpress, но в вашем случаем омжно просто развернуть его в обычный метод foreach:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public async Task GetInfo()
{
    var a = await UserServices.GetAllLog();
    
    await MainThread.InvokeOnMainThreadAsync(() =>
   {
       foreach (var item in a)
      {
           SourceLog.Add(item);
      }
   });
}
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
27.07.2023, 14:46
BOEHKOMAT, А зачем тут var
C#
1
var a = await UserServices.GetAllLog();
Вы что не знаете какой тип возвращает ваш метод чтения из БД?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
27.07.2023, 20:59
Цитата Сообщение от Midian Посмотреть сообщение
MAUI в Dispatcher нету метода BeginInvoke?
Microsoft.Maui.Dispatching.Dispatcher

Добавлено через 2 минуты
Метод расширения DispatcherExtensions.DispatchAsync
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2023, 20:59

Реализация клика мыши на Border с применением MVVM
Добрый вечер, форумчане! Делаю программку в C# WPF с паттерном MVVM и столкнулся с проблемой. Так при использовании паттерна MVVM при...

TCP чат на основе WINSOCK с применением MFC
Делаю учебный проект &quot;TCP чат&quot;. Соединение устанавливается, сообщение не принимается, хотя уходит на сервер. Помогите разобраться с...

Как реализовать чат на .Net
Всем здравстуйте У меня просто такая идея есть, ну и конечно же желание, попробывать и создать чатик используя .net, C#. Я уже...

Как создать чат на ASP.NET
Всем привет. Я новичок в .net. Хочу написать чат на asp.net. Почему asp.net? Да на php есть множество примеров, которые прекрасно...

Я хочу сделать программу - чат. Что б обмениваться сообщениями. Как такое сделать? Какой код?
Если можно то с объяснениями пожалуйста. На языке с ++


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru