Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468

Приложение MVVM. VMs и навигация

08.02.2023, 19:59. Показов 9716. Ответов 134
Метки mvvm, wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Имеются следующие вопросы.
Как при соблюдении mvvm передать в VM свойства view такие как SelectedItem? Знаю, что можно передавать через параметр команды, но в моем случае за раз в VM нужно отправить 2 объекта - логин и пароль (в модели у меня нет этих свойств, соответственно, я не должен определять их в VM. Хотя многие так делают, но это всё-таки нарушение). Нашёл решение с помощью применения MultiBinding для параметра, но мне кажется, что это слишком громоздко, так как при таком подходе каждый раз придется реализовывать конвертер. Вообще, говоря, очень трудно приходится, когда в VM нет нужных свойств, от этого обстоятельства не выходит отключать кнопку (альтернативой может служить триггер на свойство IsEnabled во view, но от этого снова приходится прикладывать больше усилий из-за описания стиля и, возможно, конвертера. Элд Хасп подсказывал, что для этих целей можно сделать прокси класс, но я недоумеваю как и где. Было бы удобно, если бы по правилам mvvm в VM допускалось хранить все необходимые свойства, а не только те, которые имеются в модели.

По той же причине не стал помещать в VM команду для кнопки, которая предназначена для входа в роли гостя. Пока что в коде view подписал хелпера на щелчок по ней. В результате просто должен произойти переход к другому view, это не логика модели. Сама навигация вызывает дополнительный вопрос, нужны рекомендации по её реализации.

Также можно отдельно рассмотреть модель. Правда там пока что немного кода. Важны все замечания.

Ещё имеется dll библиотека с вспомогательными классами, применимыми к mvvm. По ней тоже можно сделать замечания.

Вот ссылка на репозиторий https://github.com/INexteR/NewTrade/tree/Trial. В нем также содержится документ с заданием.

Связанные темы
  1. Приложение MVVM, VMs и навигация: Создание Модели Авторизация.
  2. Приложение MVVM. VMs и фильтрация по значению свойства (выбрать по производителю).
  3. Приложение MVVM. VMs и поиск (фильтрация по текстовому значению).
  4. Приложение MVVM. Ограничение пользовательского ввода для численных свойств.
  5. Приложение MVVM. Представление авторизации - Валидация.
  6. Приложение MVVM. Контекстное меню (удаление, редактирование) для элемента (Товара) в ListBox.
  7. Приложение MVVM. Диалог добавления/редактирования товара: получение данных, вызов, взаимодействие с VM и прочее.


Техническое ЗаданиеАвторизация
При запуске приложения окно входа – первое, что видит пользователь. На ней пользователю предлагается ввести свой логин и пароль или есть возможность перейти на экран просмотра товаров в роли гостя.
Только после удачной авторизации пользователь получает доступ к остальным модулям системы:
• авторизованный клиент может просмотреть товары;
• менеджер может просматривать товары;
• администратор может добавлять/редактировать/удалять товары.
Реализуйте необходимые интерфейсы для всех пользователей системы. После входа в любую учетную запись должна быть реализована возможность выхода на главный экран – окно входа. При переходе в любую учетную запись в интерфейсе (правый верхний угол) должны отображаться ФИО пользователя.
После первой попытки неуспешной авторизации система выдает сообщение о неуспешной авторизации, а затем помимо ввода логина и пароля просит ввести captcha, состоящую из 4 символов (цифры и буквы латинского алфавита) и графического шума.
CAPTCHA - должна содержать минимум 4 символа (буква или цифра), которые выведены не в одной линии. Символы должны быть либо перечеркнуты либо наложены друг на друга.
После попытки неудачной авторизации с вводом captcha, система блокирует возможность входа на 10 секунд.

Список товаров
Очень важно постоянно получать актуальную информацию об остатках товаров на складах, поэтому необходимо реализовать вывод товаров, которые хранятся в базе данных, согласно предоставленному макету. При отсутствии изображения необходимо вывести картинку-заглушку из ресурсов (picture.png) .
Вывод должен осуществляться списком.

Обратите внимание, должна выводится вся информация о товаре из базы данных.
Товары, которых нет на складе, должны отображаться на сером фоне.
Пользователь должен иметь возможность искать товары, используя поисковую строку. Поиск должен осуществляться по всем доступным данным, в том числе по нескольким атрибутам одновременно.
Пользователь должен иметь возможность отсортировать товары (по возрастанию и убыванию) по стоимости.
Кроме этого, пользователь должен иметь возможность отфильтровать данные по производителю. Выбор производителя должен быть из выпадающего списка. Первым элементом в выпадающем списке должен быть “Все производители”, при выборе которого настройки фильтра сбрасываются.
Поиск, сортировка и фильтрация должны происходить в реальном времени, без необходимости нажатия кнопки “найти”/ ”отфильтровать” и т.п. Фильтрация и поиск должны применяться совместно. Параметры сортировки, выбранные ранее пользователем, должны сохраняться и во время фильтрации с поиском.
В верхней части окна необходимо показывать количество выведенных данных и общее количество записей в базе. Например, 15 из 37 . В случае, если данные в таблицу выводятся после фильтрации или поиска, количество выведенных данных необходимо обновить исходя из размера выборки.
Реализуйте удаление товара. Товар, который присутствует в заказе, удалить нельзя. Товар, у которого есть дополнительные товары, удаляется из базы данных вместе с информацией о дополнительных товарах, если ни один из товаров (даже дополнительный) не заказан.
Реализуйте переход на окно добавления товара и окно редактирования выбранного товара.

Добавление/ редактирование товаров
Необходимо реализовать возможность добавления и редактирования исходных товаров (сырья) для всей продукции компании. Редактировать данные может только администратор.
Необходимо добавить возможность редактирования данных существующего товара, а также добавление нового товара в новом окне - форме для добавления/ редактирования товара. Переходы на данное окно должны быть реализованы из формы списка: для редактирования - при нажатии на конкретный элемент, для добавления - при нажатии кнопки “Добавить товар”.
На форме должны быть предусмотрены следующие поля: наименование, категория (выпадающий список), количество на складе, единица измерения, поставщик, стоимость за единицу, изображение и подробное описание (с возможностью многострочного ввода) . Стоимость товара может включать сотые части, а также не может быть отрицательной. Минимальное количество также не может принимать отрицательные значения.
При открытии формы для редактирования все поля выбранного объекта должны быть подгружены в соответствующие поля из базы данных, а таблица заполнена актуальными значениями.
ID товара при добавлении не отображается, автоматически вычисляется +1 к имеющемуся в БД, при редактировании ID доступно только для чтения.
Пользователь может добавить/ заменить изображение у товара. Изображение, которое загружает пользователь при добавлении или редактировании, должно сохраняться в папку с приложением. Для оптимального объема реализуйте ограничение на размер фото: 300Х200 пикселей. В базе данных необходимо хранить путь к изображению. При замене изображения, старое фото из папки должно быть удалено.
Для того, чтобы администратор случайно не изменял несколько товаров, предусмотрите невозможность открытия более одного окна редактирования.
После редактирования/добавления/удаления товаров данные в окне списка товаров должны быть обновлены.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2023, 19:59
Ответы с готовыми решениями:

Приложение MVVM, VMs и навигация: Создание Модели Авторизация.
Здравствуйте. Имеются следующие вопросы. Как при соблюдении mvvm передать в VM свойства view такие как SelectedItem? Знаю, что можно...

Приложение MVVM. VMs и поиск (фильтрация по текстовому значению)
Пользователь должен иметь возможность искать товары, используя поисковую строку. Поиск должен осуществляться по всем...

Приложение MVVM. VMs и фильтрация по значению свойства (выбрать по производителю)
Да, понятно, разобрался, отличное решение. Сейчас работаю над фильтрацией и поиском. Возникают вопросы. Фильтрация: пользователь ...

134
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
05.03.2023, 21:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от INexteR Посмотреть сообщение
Вроде это случается из-за того, что по умолчанию в представлении коллекции первый элемент установлен в качестве CurrentItem
Да...
Почему-то до этого не сталкивался с таким.
Не знаю есть ли какой-то нормальный способ это задавать.
Пока используйте такой:
XML
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
        <ListBox ItemsSource="{Binding Source={StaticResource productsView}}"
                 Grid.Row="1"
                 x:Name="list"
                 SelectionMode="Single"
                 ScrollViewer.CanContentScroll="False"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                 Loaded="OnLoadedLBox">
            <x:Code>
                <![CDATA[
        private void OnLoadedLBox(object sender, RoutedEventArgs e)
        {
            ((ListBox)sender).UnselectAll();
        }
                ]]>
            </x:Code>
            <ListBox.ItemTemplate>
Добавлено через 4 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
Но в этом задании, честно сказать, ничего не будет меняться
Ну, так тем более не стоит усложнять.
Добавьте все источники в один интерфейс и сделайте одно общее событие изменения.
Событие можно даже добавить не в интерфейс источников, а в IShop.
Что-то типа типа:
C#
1
2
bool IsLoaded {get;}
event EvendHandler LoadedChanged;
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
05.03.2023, 21:30  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не знаю есть ли какой-то нормальный способ это задавать.
Можно поставить списку IsSynchronizedWithCurrentItem="False". По умолчанию оно вроде бы {x:Null}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
05.03.2023, 21:33
Цитата Сообщение от INexteR Посмотреть сообщение
Но что-то они как-то не ловятся. Быть может, Вы видели эти строки:
У меня всё ловится:
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
05.03.2023, 21:41  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Добавьте все источники в один интерфейс и сделайте одно общее событие изменения.
Можно Вы покажете? Пожалуйста

Добавлено через 7 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У меня всё ловится:
Попробовал вновь. А у меня почему-то не ловится
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
05.03.2023, 21:46
Цитата Сообщение от INexteR Посмотреть сообщение
Можно поставить списку IsSynchronizedWithCurrentItem="False".
Если работает - используйте.

Цитата Сообщение от INexteR Посмотреть сообщение
А у меня почему-то не ловится
Уверены что окошко с исключением не спряталось под основным окном?
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
05.03.2023, 21:52  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Уверены что окошко с исключением не спряталось под основным окном?
Вот
Миниатюры
Приложение MVVM. VMs и навигация  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
05.03.2023, 22:59
Цитата Сообщение от INexteR Посмотреть сообщение
покажете? Пожалуйста
Скинул фиксацию.

Добавлено через 2 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
Вот
Но это же просто отлов дебагера. Задаётся в настройках.
В рантайм этого не будет.

Можно так же пометить исключение как обработанное, тогда и в дебагере оно не будет останавливать работу:
C#
35
36
37
38
39
        private void OnException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Исключение");
            e.Handled = true;
        }
Добавлено через 3 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
А для редактирования давайте создадим контекстное меню для каждого элемента.
А что будет в этом контекстном меню?
Создайте его. Как реализовать обработку пунктов - другой вопрос.

Может просто добавить в строку ListBox пару кнопок "Удалить" и "Изменить"?

Цитата Сообщение от INexteR Посмотреть сообщение
Хотя тут могут возникнуть неудобства из-за того что оно не является частью визуального дерева...
Но Контекст данных будет один и тот же.
Но согласен, там действительно предстоят "танцы с бубном".
Поэтому проще кнопки в троке. Это и более привычно, типично для современных GUI.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 13:30  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но это же просто отлов дебагера. Задаётся в настройках.
В рантайм этого не будет.
Не понимаю. Сейчас у меня разве не время выполнения?

Добавлено через 2 часа 34 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Почему-то до этого не сталкивался с таким.
Вот что я нашел по этому поводу:
В нестандартном представлении навигация работает по-другому!
По умолчанию изменение текущего объекта в нестандартном представлении автоматически отражается на всех привязанных к нему селекторах; чтобы отменить синхронизацию, нужно явно присвоить свойству селектора IsSynchronizedWithCurrentItem значение false. То есть поведение прямо противоположно тому, что наблюдается в представлении по умолчанию!

Хотя свойство IsSynchronizedWithCurrentItem по умолчанию равно false, WPF автоматически меняет его значение на true, когда в свойство селектора ItemsSource записывается ссылка на нестандартное представление, если только ему не было явно присвоено другое значение (или свойство SelectionMode селектора равно Single). Идея в том, что, работая с нестандартным представлением, вы заведомо знаете о его существовании, поэтому и получаете ожидаемое поведение навигации по умолчанию.
Добавлено через 34 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для этого нужно чтобы product был объектом производным от Product из Модели (Репозитория).
Для удаления, это ещё может быть так.
А для обновления и добавления это точно не будет так.
А вот этого я никак не могу понять. Ну то есть почему нельзя выполнить приведение. Как я понимаю, Вы хотите всем этим сказать, что в метод могут быть переданы объекты других типов (которых у нас нет), реализующие данный интерфейс?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 20:27
Цитата Сообщение от INexteR Посмотреть сообщение
Сейчас у меня разве не время выполнения?
Есть сборка в Debug и в Release.
Кроме этого есть ещё разница в некоторых нюансах при запуске приложения на исполнения в Студии - она его запускает в режиме отладки и при запуске экзешника из проводника.
По факту мы получаем четыре дефолтных режима:
1) Сборка Debug - запуск Debug в Студии;
2) Сборка Release - запуск Debug в Студии;
3) Сборка Debug - запуск из системы (в проводнике);
4) Сборка Release - запуск из системы.

При запуске Debug на поведение приложения могут влиять ещё настройки Студии. В том числе в настройках включается остановка на необработанных исключениях, но которые не обваливают приложение.

Обратите внимание на цвет строки при исключении на вашем скрине - он жёлтый. Такой же как на точке останова. И это и есть точка останова, чтобы вы при отладке могли получить информацию об исключении. Но так же как и точки останова, при запуске из системы они не будут ничего останавливать.

Цитата Сообщение от INexteR Посмотреть сообщение
Пункты MenuItem.
Скомпонуйте, создайте его. Разбираться потом будем.

Цитата Сообщение от INexteR Посмотреть сообщение
Вот что я нашел по этому поводу:
Я о другом: Почему при инициализации CollectionView,CurrentItem устанавливается на первом элементе коллекции, а не перед ним?

Вы же пишите за синхронизацию

В моём примере же вы видите, что синхронизации не нарушена, но тем не менее CurrentItem сброшен.

Цитата Сообщение от INexteR Посмотреть сообщение
Ну то есть почему нельзя выполнить приведение. Как я понимаю, Вы хотите всем этим сказать, что в метод могут быть переданы объекты других типов (которых у нас нет)
Конечно.
Вот вы получили в View имя и другие данные для нового продукта.
Как вы там в View можете создать IProduct или VM, чтобы передать эти данные в метод Модели?
Попробуйте сами это сделать чтобы понять в чём причина.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 21:00  [ТС]
Элд Хасп, про отладку всё ясно, спасибо.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Почему при инициализации CollectionView,CurrentItem устанавливается на первом элементе коллекции, а не перед ним?
Ну вот видимо оно так в системе заложено. Я вот помню ранее, что когда привязывал подсказку элемента к его ошибке, писал:
XML
1
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)/ErrorContent}"
Тут используется специальный синтаксис для ссылки на текущий объект коллекции - косая черта (ну, я думаю, Вы это и сами знаете). Это приводило к отображению первой ошибки
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Как вы там в View можете создать IProduct или VM, чтобы передать эти данные в метод Модели?
Действительно, никак. Но я ещё предполагал такой подход, где в VM мы можем получить все достоверные данные и далее передать их в метод модели, а уже там он на их основе сконструирует Product. Но видимо мы будем создавать объект товара в VM (без понятия, как) и сразу ему там через View задавать свойства, верно понял? Ну и потом его отдавать методу
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Попробуйте сами это сделать чтобы понять в чём причина.
Попробую
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 21:36
Цитата Сообщение от INexteR Посмотреть сообщение
Но я ещё предполагал такой подход, где в VM мы можем получить все достоверные данные и далее передать их в метод модели, а уже там он на их основе сконструирует Product.
Этот подход лучше концептуально, но требует метода в параметры которого передаются все свойства сущности.
Если в сущность надо передать 10-20-30 свойств как делать?
Или реализация интерфейса или словарь.

В общем у каждого способа есть свои плюсы и минусы.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 22:10  [ТС]
Элд Хасп, я тут заметил, что я сам себе противоречу. Сначала пишу
Цитата Сообщение от INexteR Посмотреть сообщение
Действительно, никак.
А вслед
Цитата Сообщение от INexteR Посмотреть сообщение
Но видимо мы будем создавать объект товара в VM (без понятия, как)
Вы и сами говорите, что в VM нельзя создать товар. И как тогда быть?

Добавлено через 7 минут
То есть первый подход, о котором я написал, мы использовать не будем из-за тучи параметров, а второй в принципе невозможен. Или возможен?

Добавлено через 5 минут
Ааа, теперь ясно, почему Вы сделали ProductVM производным от IProduct. Тогда второй подход возможен, на уровне VM будет использоваться ProuctVM, а не Product
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 22:10
Цитата Сообщение от INexteR Посмотреть сообщение
а второй в принципе невозможен. Или возможен?
Я же уже сделал реализацию
Вы что не смотрели?
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 22:11  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я же уже сделал реализацию
Вы что не смотрели?
Я смотрел, но тогда ещё не понял для чего наследование от IProduct
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 22:15
Цитата Сообщение от INexteR Посмотреть сообщение
Ааа, теперь ясно, почему Вы сделали ProductVM производным от IProduct. Тогда второй подход возможен, на уровне VM будет использоваться ProuctVM, а не Product
Совершено верно.

И поэтому не возможно приведение ProuctVM к Product Модели, хоть интерфейс у них и общий.

Добавлено через 2 минуты
INexteR, на всякий случай напоминаю.
Мы делаем "идеальную" и, следовательно, избыточно сложную реализацию.
Делаем это с цель обучения.
После завершения этой реализации, я буду вам показывать где и как можно "срезать углы".
И такую задачу (по функционалу) вы сможете реализовать, когда во всём разберётесь, за несколько часов.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 22:26  [ТС]
Цитата Сообщение от INexteR Посмотреть сообщение
И вот ещё насчет диалога. Для чего Вы описываете базовый класс для разных типов? Требуется же только добавление и редактирование товара. И зачем в диалоге режим View? Я его убрал, он по заданию не нужен
Элд Хасп, нужны ли на самом деле два базовых класса диалогов? И как я сейчас понял, константу View Вы добавили в перечисление для режима дизайнера

Добавлено через 11 минут
Ещё я переделал интерфейсы. Увидев, что Вы пишете
C#
1
public interface IProductsViewModel : ISourcesViewModel
Я написал
C#
1
public interface IProductsSource : ILoadSources
(до этого IProductsSource не наследовался от ILoadSources)
Также я перебросил коллекцию товаров из производных интерфейсов в базовые интерфейсы (это не ошибка?)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 22:34
Цитата Сообщение от INexteR Посмотреть сообщение
Нужны ли на самом деле два базовых класса диалогов? И как я сейчас понял, константу View Вы добавили в перечисление для режима дизайнера
Согласен. Устал после работы - голова уже не варила.
Наверное была какая-то задумка для чего я так сделал, но не помню...
Сделал по другому, а промежуточный класс не удалил.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
константу View Вы добавили в перечисление для режима дизайнера
Нет.
Обычно в списке выводится сокращённая информация.
А для просмотра детализированной открывается Окно или Страница только с этим товаром.
В данной задаче вы это не реализуете, но в типовой такой режим скорее всего был бы.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
Я написал
Да, можно и так.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 22:38  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В данной задаче вы это не реализуете, но в типовой такой режим скорее всего был бы.
А, ну это можно сделать. Только в самом конце, сначала всё по заданию

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Согласен. Устал после работы - голова уже не варила.
Ну что же Вы так себя не жалеете? Приходите и отдыхайте сразу
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
06.03.2023, 22:39
INexteR, на этой задаче я ещё не могу показать нюансы реализации редактирования сущностей для навигационных свойств.
Там тоже хватает своих особенностей.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.03.2023, 22:47  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сделал по другому, а промежуточный класс не удалил.
То есть удаляется один класс. Но все-таки второй базовый остается? Я просто думал, что для диалога тоже нужен будет какой-нибудь там интерфейс IDialogService

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
на этой задаче я ещё не могу показать нюансы реализации редактирования сущностей для навигационных свойств.
Ну тут только нужно будет редактирование в плане замены сущности целиком (выбор из выпадающего списка)

Добавлено через 2 минуты
Приятно было побеседовать с вами. Теперь уж я пойду. Спокойной ночи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2023, 22:47

Навигация по страницам wpf и mvvm
Здравствуйте Подскажите, плиз, есть ли способ , в рамках паттерна mvvm, вернутся на исходную страницу, без использования кнопок...

Навигация страниц UWP MVVM
Добрый день! Мой проект состоит из 3х страниц: 1. Загрузка данных с сервера; 2. Расчётные операции на основе этих данных; 3....

Приложение MVVM. Быстрая "Нестрогая MVVM" реализация
В этой теме будет размещена простая и быстрая реализация. Основная тема:...

MVVM первое приложение
Здравствуйте. Пишу курсовую по БД, и почитав в инете разные ссылки решил сделать по шаблону MVVM. идея шаблона понятна, но сама...

WPF приложение с паттерном MVVM
Добрый день Всем! Хочу сделать небольшое приложение с формулами, но нужна помощь в освоении, опыт программирования имею только на языке...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru