|
0 / 0 / 0
Регистрация: 11.07.2026
Сообщений: 12
|
|||||||||||
Странно, но после SelectedItems.Clear, в SelectedItems по прежнему осталась таже строка11.07.2026, 15:51. Показов 3491. Ответов 51
Метки нет (Все метки)
Всё должно было быть коротко:
0
|
|||||||||||
| 11.07.2026, 15:51 | |
|
Ответы с готовыми решениями:
51
Правильное отображение selectedItems в Combobox
|
|
0 / 0 / 0
Регистрация: 11.07.2026
Сообщений: 12
|
||||||||
| 15.07.2026, 11:08 [ТС] | ||||||||
И я поддерживая такое разделение в принципе, на практике не следую MVVM во всем. Возможно, в данном случае, я что-то не правильно сделал. Во всём C# «экспериментатор» типа меня может сотворить что-то, что в голову его создателей не приходило. ![]() Добавлено через 2 минуты Добавлено через 12 минут Пока что меня пугают слова типа «IKSGONZListWindowVM». Кто такой «KSGONZ» непонятно. И скорее всего VS сообщит мне что-то о версии не моей, или об отсутствие «KSGONZ». Но я попробую, но не сегодня.
0
|
||||||||
|
Модератор
|
||
| 15.07.2026, 11:09 | ||
|
Основной механизм взаимодействия WPF элеметов с данными - это Привязки (Binding). И хотя это ОДНОПОТОЧНЫЙ механизм работающий в UI потоке, но это в тоже время и АССИНХРОННЫЙ механизм, который позволяет задавать значение свойствам элементов не вмешиваясь в процесс рендеринга. А по вашим сообщениям с большой вероятностью проблема именно в этом. В нормальном режиме, замена коллекции ItemsSource или её очистка (если это ObservableCollection) или очистка SelectedItems автоматически должны приводить к к SelectedItem=null и SelectedIndex=-1. Так как у вас не используются привязки, то сохраняться в кеше старым значениям просто негде. Но у вас этого не происходит, значит вы явно в какой-то нестандатный, неправильный момент производите операции по очистке. Кроме того между очисткой коллекции и сбросом SelectedItem=null и SelectedIndex=-1 должно пройти время. Так как не всегда эти операции выполняются в одном фрейме UI потока. Поэтому и говорят что в UI элементах нельзя хранить данные. Под этим подразумевается, что "истинные данные" должны храниться в отдельном слое. UI элементы их только представляют. И это представление "в моменте" может отличаться от настоящих данных. В большинстве случаев для GUI задержака 20-50мс - это нормальное и частое явление. А для "истинных данных" даже наносекудные задержки могут привести к проблемам. Вот такие особенности (не только и это) и вызвали необходимость разработки паттерна MVVM. То есть это не "выдумки яйцеголовых", а ответ на особенности реализации приложения с GUI на XAML платформе.
0
|
||
|
|
|||||||
| 15.07.2026, 11:34 | |||||||
|
Вот *.xaml.cs окна из моего примера. Тут только по свойству VM переключает надписи и всё. Всё остальное в VM+Model, Model у меня это СУБД MS SQL Server + слой доступа к данным на C#.
1. View - ваше окно, показывает пользователю что нужно и принимает от него действия, которые по привязанным командам/свойствам передаются в VM. 2. Model - ваша СУБД + Excel + методы доступа к ним для получения/записи данных. 3. ViewModel - соединяет 1 и 2 своими методами и свойствами. Получает данные из Model, присваивает их своим свойствам ( по привязкам View меняет данные в своих свойствах), готовит их для/из Model и передаёт их в/из Model с помощью методов из Model. Вот и все дела... 4. А ещё не всё Чтобы всё это запустилось, нужно в Application запустить DI (Dependency Injection) где все слои настраивают своё взаимодействие...WPF изначально был разработан для MVVM и поддерживает этот паттерн из коробки. Всё остальное - это просто головная боль. Хотите что-то быстро налепить - возьмите Windows Forms (другой тип проекта в студии). Там с этим делом проще. Хотя тоже не приветствуется, для Windows Forms есть свой паттерн - называется MVP.
1
|
|||||||
|
Заблокирован
|
|
| 15.07.2026, 11:47 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.07.2026
Сообщений: 12
|
||||||||||||||||||||
| 15.07.2026, 13:20 [ТС] | ||||||||||||||||||||
Теперь, когда по Вашему предложению сделал «ItemsSource="{Binding REGS}"», стало
Добавлено через 8 минут ![]()
0
|
||||||||||||||||||||
|
|
|||
| 15.07.2026, 13:49 | |||
![]() Добавлено через 18 минут
0
|
|||
|
Модератор
|
||||||||||||||
| 15.07.2026, 19:57 | ||||||||||||||
|
Также командой Microsoft был разработан первый официальный WPF-фреймворк — Composite Application Guidance for WPF (Prism). Но он оказался чрезмерно сложным и не получил широкого распространения в любительской среде. Его основной нишей стали «тяжёлые» корпоративные приложения. Добавлено через 20 минут Они его примут после выхода из этого фрейма. Хоть отладчиком, хоть чем смотри. Иначе и невозможно было бы использовать отладчик для отладки асинхронных приложений. Но в данном случае избыточно. В большинстве случаев (99%) хватает такой реализации:
Set(value) - метод фреймворка отвечающий за реализацию INPC.Обычно если требуется менять коллекцию, то не требуется изменять её элементы и наоборот. Поэтому в ObservableCollection обычно используется в иммутабельном свойстве, а в мутабельном используется какой-то IList<T>.Использование же DependencyProperty на уровне ViewModel и ниже - вообще, недопустимо (не только по MVVM, но и более широко по SOLID).
0
|
||||||||||||||
|
0 / 0 / 0
Регистрация: 11.07.2026
Сообщений: 12
|
|
| 16.07.2026, 12:43 [ТС] | |
|
Добавлено через 8 минут
Вот опять проблемы со мной. Написал о решении проблемы, и поблагодарил за все, нажал на кнопку [Отправить быстрый ответ] и получил пустой «ответ». ![]() Добавлено через 4 минуты Короче сделал чтобы в ListBox хранились только готовые строки, без ItemTemplate и DataTemplate. Спасибо за внимание и советы.
0
|
|
|
|
||||||||
| 16.07.2026, 12:45 | ||||||||
![]() Нечистое это! ![]() А где же Interaction / Behaviours ?
0
|
||||||||
|
|
||||||
| 16.07.2026, 12:56 | ||||||
|
wizard41, Всё там нормально
При загрузке получаем контекст окна
0
|
||||||
|
|
||||
| 16.07.2026, 13:05 | ||||
|
Я это к тому, что вроде как "топим" (призываем) за чистый mvvm, а показываем примеры слегка "грязноватые"... ![]() *.xaml.cs должен быть пустым (кроме InitializeComponent()). Добавлено через 4 минуты
0
|
||||
|
|
||||
| 16.07.2026, 13:48 | ||||
У ТС вся логика в *.xaml.cs, вот и пошёл разговор про разделение и привязки. Тут две строчки, а там... Так что всё нормуль, это логика View и находится она во View ![]()
0
|
||||
|
|
|||||
| 16.07.2026, 13:57 | |||||
0
|
|||||
| 16.07.2026, 14:00 | |
|
Не по теме: Тот случай, когда проще (да и уже так написано судя по коду) написать на WinForms, но тренды "заставляют колоться" об WPF.
0
|
|
|
|
|||
| 16.07.2026, 14:03 | |||
Window_Loaded().switch и используется, которое работает как флаг режима работы, а вы уже в своём View делаете что хотите в зависимости от значения этого свойства.
0
|
|||
|
|
||
| 16.07.2026, 14:07 | ||
|
И окно вроде бы как Child (?), соответственно, установить/получить его контекст можно еще ДО его появления в принципе. Ладно, это я так. Поворчать нельзя что ли
0
|
||
|
|
||||
| 16.07.2026, 14:19 | ||||
![]() ![]() Добавлено через 6 минут
0
|
||||
|
|
|||
| 16.07.2026, 14:26 | |||
|
Просто фраза:
На сколько я понял, содержимое окна зависит от флага vm.NZMode - верно? Стало быть, этот флаг известен уже на стадии создания VM (vm). Теперь, все зависящие элементы должны отработать по привязке к этому NZMode..Если это окно "главное", т.е. показывается сразу после запуска приложения, то и создание VM, чтение чего-то там (БД) и последующий показ окна с установкой DataContext - вообще выносится на уровень приложения (в App). Это создает сильную связь с таким (оригинальным) View. Если у меня View другой, то с этим возникнет проблема. Все. Ликбез закончен - пошли пить пиво
0
|
|||
|
|
||||||||||
| 16.07.2026, 14:53 | ||||||||||
partial) класса, так что все именованные элементы UI являются приватными полями класса окна. Ну как так, эххх ![]()
0
|
||||||||||
|
|
|||
| 16.07.2026, 15:28 | |||
|
Намерение использовать событие Loaded может трактоваться как желание предварительно "подготовить" данные для этого окна. Т.е., это означает, что когда окно отрисуется - в нем будут показаны текущие валидные данные + состояние элементов окна соотв. некоторым там флагам.txtCaption.Text = "Просмотр списка НЗ";. Про строку "Просмотр списка НЗ" не знает никто, кроме самого View.Если к VM подключить совершенно другую View, написанную другими, то здесь произойдет неясная ситуация: что писать, если свойство vm.NZMode == true? Будут звонить в 3 ночи и спрашивать "А что это означает?".Таким образом, паттерн не соблюден полностью - есть сильная связь с объектами внутри класса окна (View), которые, частично, диктуют содержание итогового окна. Нет этой View - нет этого содержания. Опять же, не вдаваясь в детали конкретно этого приложения, я бы поступил по другому: сперва получил бы весь контекст (включая тот же флаг NZMode), даже через await, если это долго. И только потом показал бы окно. И все это в стартовой фазе класса App. Никакие события вроде "Window_Loaded" для этого даже не потребовались бы. Для чего это может быть нужно - только, если, к примеру, в зависимости от каких-то данных, в окне рассчитываются какие-то размеры или позиции.. Но это редкость, особенно для WPF.
0
|
|||
| 16.07.2026, 15:28 | |
|
Работа с SelectedItems ListBox
listbox SelectionChanged clear ошибка в TreeView.Items.Clear(); Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|