|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
||
Реализация приложения "Калькулятор НДС"06.11.2021, 06:21. Показов 3746. Ответов 41
Метки нет (Все метки)
Тема создана разделением темы: MessageBox в MVVM
0
|
||
| 06.11.2021, 06:21 | |
|
Ответы с готовыми решениями:
41
SEO-фирма с НДС или без НДС? |
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
|||
| 09.11.2021, 00:31 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
Модератор
|
|||||||||||||||||
| 09.11.2021, 09:10 | |||||||||||||||||
|
salaga2019, продолжаем.
У вас какой-то сборник в реализации INPC одни и те же методы по нескольку раз реализованы с разными именами. Поэтому добавил библиотеку с реализацией: Простые реализации для тем на форуме . VM сначала объявляем класс, отчего он наследуется и какие интерфейсы реализует.
Получаем такую рыбу:
0
|
|||||||||||||||||
|
Модератор
|
||||||||||||||||||||||||||
| 09.11.2021, 10:25 | ||||||||||||||||||||||||||
|
salaga2019, эту реализацию уже можно использовать для создания GUI (View) и проверки её компонентов.
Для этого создадим демо вариант VM. Добавляем статический экземпляр в VM:
Теперь нужно добавить конвертер выдающий сумму прописью.
Осталось добавить в ViewModel связь с Моделью. Пока разберитесь с этим. Потом продолжим. Сделал Фиксацию f9b3725a.
0
|
||||||||||||||||||||||||||
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
||
| 09.11.2021, 11:15 [ТС] | ||
|
Если программист пишет приложение с использованием паттерна MVVM, он понимает, что его приложение будут тестировать, только вот как происходит тестирование я не знаю, но оно должно быть без View, это я к чему, если тестирование будет без View, то как будет работать конвертер, который находится во View или же имеется ввиду что не будет xaml разметки, а остальные классы View будут задействованы? Вы, как человек опытный, уже понимаете что, зачем и почему вы пишете тот или иной код и создаете класс в том или ином месте, раз вы создаете конвертер во View, видимо View все равно будет участвовать при тестировании, может быть это глупый вопрос, но я думаю это очень важный момент.
0
|
||
|
Модератор
|
||||
| 10.11.2021, 09:33 | ||||
|
Если честно, я не занимаюсь продакшен частью. Поэтому знания в тестировании очень поверхностные. Вроде XAML тоже тестируется, для этого даже в WPF есть интерфейс автоматизации. Но в деталях я не могу вам в этой области помочь. Допустим, вы решили сделать мультиязычный интерфейс. Переключили локализацию GUI и у вас автоматически будет выдаваться текст на украинском, английском и другом нужном вам языке. Имеет ли язык интерфейса отношение к логике Модели (Бизнес Логике)? Определённо нет. Поэтому и подобный конвертер не имеет отношения к Модели. НО! Такой конвертер является универсальным классом. Ведь никто не может запретить его использовать где угодно, в том числе и в Модели. Поэтому "по феншую", он должен быть не в самом View, а во внешней Библиотеке. Можете его переместить в проект Common. Или создать отдельную библиотеку. Так же ваши Custom Control (InputTextBoxControl и др.) тоже созданы очень коряво. Как минимум их надо вынести в отдельной проект "Библиотека для Custom Control WPF" и создавать как полноценные элементы. Их стили должны быть в теме и подключаться автоматически, как у всех дефолтных элементов.
0
|
||||
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
||||||||||||
| 11.11.2021, 05:24 [ТС] | ||||||||||||
|
1. Можете рассказать для чего указывать атрибуты перед классом и когда их нужно применять? Я много видел кода с их использованием, но нигде не описывали зачем они их использовали, у меня есть предположение что это для того, чтобы ограничить класс для работы только с типами данных, указанных в атрибутах, что-то своего рода фильтра, но не уверен. 2. Почему вы используете в разметке FrameworkElement.Resources, а не Window.Resources? 3. Хочу уточнить, чем отличаются эти 4 способа установки DataContext? Я видел у Вас 4 варианта, я не придавал этому особого значения, но увидел, что Вы в разных проектах по разному задаете DataContext, и мне стало интересно, почему. 1) DataContext="{x:Static vm:MainWindowViewModel.DemoInstance}" 2) d : DataContext="{x:Static local:MessagesViewModel.XamlInstace}" 3)
0
|
||||||||||||
|
|
|||||||
| 11.11.2021, 06:09 | |||||||
|
Полная запись вот такая
0
|
|||||||
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
||
| 11.11.2021, 06:26 [ТС] | ||
|
0
|
||
|
Модератор
|
||||||||||||
| 11.11.2021, 11:52 | ||||||||||||
|
Если перед конвертерами и расширение разметки - они используются Дизайнером XAML и облегчают компиляцию XAML. В целом - это часть метаданных типа, но не часть его кода логики. Кому надо - тот использует. В некоторых случаях имеют существенное значение. Допустим, в Entity Framewor атрибутами сущностей задаётся схема БД. Resources объявлены в базовом FrameworkElement, поэтому подходят для любого UI элемента. Иногда бывает объявил на одном уровне компоновки, а потом решил перенести на другой. Если FrameworkElement.Resources, то просто перенёс и всё.А если с указанием конкретного типа, то придётся потом ещё "руками" править тип. 1 - Контекст Данных Времени Исполнения. Если не задан Контекст данных Времени Разработки, то будет использоваться и во время разработки. Но это часто невозможно. Допустим, реальный контекст получает данные из БД которой не существует во время разработки. Чтобы его получить - надо на Шарпе объявить это свойство и инициализировать его. Третье - это создание экземпляра указанного типа. Здесь же в XAML можно указать и начальные значения свойств экземпляра. Преимущества такого способа - вы можете в XAML менять значения свойств и сразу (без компиляции) видеть как на это реагирует GUI.
Code Behind во время разработки не исполняется. Поэтому Дизайнер XAML не видит такую инициализацию и остаётся "слепым". Это затрудняет создание привязок и увеличивает вероятность ошибок. Если инициализация сложная и в XAML её трудно прописать, то лучше использовать Локатор в App. Или какое-то иное решение позволяющее и осуществить такую инициализацию, и не оставить Дизайнер слепым. Добавлено через 3 минуты Где она рекомендует? И в любом случаи не стоит относится к Студии, как к всегда правильному советчику. Самый яркий пример - это наличие панели инструментов UI элементов и возможность их DragAndDrop в разметку Окна. Кроме проблем - это ничего не даёт.
0
|
||||||||||||
|
|
||
| 11.11.2021, 13:50 | ||
|
salaga2019,
1
|
||
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
|||||||||
| 11.11.2021, 14:05 [ТС] | |||||||||
0
|
|||||||||
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
|
| 11.11.2021, 14:10 [ТС] | |
|
0
|
|
|
|
|
| 11.11.2021, 14:52 | |
|
salaga2019, По поводу вашего скрина, студия предлагает прописать контекст для времени разработки. Согласитесь и выберите нужную VM из списка.
Добавлено через 2 минуты Если в VM есть конструктор, который там что-то делает, то студия попытается визуализировать данные полей VM, в простейшем случае будет выводить имена типов полей в элементах окна.
0
|
|
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
||
| 11.11.2021, 14:57 [ТС] | ||
|
0
|
||
|
|
|
| 11.11.2021, 14:57 | |
|
Но могут быть и ошибки в дизайнере XAML, из-за того что например данные VM получает в другом потоке или там будет что-то сложное...
Для избежания такого нужно отключить генерацию кода в дизайнере XAML. Вот эту кнопель вырубить надо
0
|
|
|
15 / 4 / 2
Регистрация: 16.04.2019
Сообщений: 112
|
|
| 11.11.2021, 15:04 [ТС] | |
|
0
|
|
|
|
||
| 11.11.2021, 15:32 | ||
|
0
|
||
|
Модератор
|
||||||||||
| 11.11.2021, 18:06 | ||||||||||
|
Это некий костыль для тех кто только перешёл с Форм и кроме ознакомления с набором UI элементов он больше ни на что не пригоден. Максимум сделать Окно с одной кнопкой выводящей "Hello World!". После этого об этой панели стоит забыть. Это когда вы , вообще, контекст данных не задаёте. Ну, Студия же не знает как вам правильно его нужно создать. Поэтому если у типа есть конструктор по умолчанию, то предлагает создать экземпляр типа. Если в приложении одно Окно с постоянным контекстом данных (а большинство приложений именно таких), то это вполне приемлемый вариант. Но, он не всегда удобен для обращения из элементов у которых контекст данных наследуется не от Окна. Допустим, чтобы задать команду в элементе ItemsControl придётся уже использовать "танцы с бубном". Более удобный и тоже простой вариант, но который позволят обращаться к VM с любого уровня иерархии:
0
|
||||||||||
| 11.11.2021, 18:06 | |
|
В чеке ставка НДС 0% в нежно чтобы в чеке писал БЕЗ НДС Выгрузка в "Возмещение НДС Налогоплательщик 3.0" (пик ндс) Рассчитать сумму НДС, начисленную в бюджет; сумму НДС, принятую к вычету; сумму налога к уплате в бюджет Инженерный калькулятор, реализация скобок Калькулятор. Реализация работы с двоичными числами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|