Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376

Как поднять RaisepropertyChanged отдельного свойства извне?

24.09.2020, 18:09. Показов 8230. Ответов 100
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Вот такого вида свойство.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public const string Property1PropertyName = "Property1";
 
        private bool _property1 = false;    
        public bool Property1
        {
            get
            {
                return _property1;
            }
 
            set
            {
                if (_property1 == value)
                {
                    return;
                }
 
                _property1 = value;
                RaisePropertyChanged(Property1PropertyName);
            }
        }
Каким образом можно поднять его RaisePropertyChanged извне?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2020, 18:09
Ответы с готовыми решениями:

Как изменить свойства ComboBox из отдельного потока
Ребята! Привет! Вопрос такой: есть форма с комбобоксами и текстбоксами, когда я ввожу туда данные, они передаются в процедуру которая...

Какие общие правила для написания отдельного класса/файла с условием/заданием и отдельного класса с методом решен?
Например: условие задания: public class Main { public static void main(String args) { int source = {1, 2, 3, 4, 5, 6, 7, 8,...

PropertyGrid. Как отловить видимость свойства в зависимости от другого свойства?
Работаю с propertyGrid. Одно поле высвечивается, когда в другом появляется определенное значение. Взяла за основу раздел «Как управлять...

100
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 09:53  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Рассуждая "от View" вы поневоле будет делать "некрасивую" реализацию.
я так не думаю, все-таки серьезные производители ПО заботятся о дружелюбности GUI.

есть конечно "говно-интерфейсы" которые получились абы-как, так как разработчик шел от Model к View, а не занимался ими параллельно.
И получилось как в анекдоте.
Амерские хакеры сошли с ума, так как три дня не могли зарегистрироваться на сайте "ГосУслуги".
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 15:09
Цитата Сообщение от Berendom Посмотреть сообщение
я так не думаю, все-таки серьезные производители ПО заботятся о дружелюбности GUI.
есть конечно "говно-интерфейсы" которые получились абы-как, так как разработчик шел от Model к View, а не занимался ими параллельно.
И получилось как в анекдоте.
Совершенно не верно.

Во первых, я нигде не говорил, что GUI неважен, и его можно делать абы как.

Во вторых, то что нужно получить определённый GUI ни как не означает, что из-за это меняется архитектура WPF Решения.
Архитектура WPF Решения в первую очередь задаётся имеющимися в WPF инструментами.
И самые важные из них (с точки зрения архитектуры) - это Привязки (Bindibg) и Контекст Данных (DataContext).
Наилучшем образом использование этих инструментов предлагается в MVVM.
И, фактически, даже не разделяя явно Решение на слои MVVM, в WPF Решении всё равно, пусть и криво, реализуется этот паттерн.
WPF Решения вне WPF - это полный отказа от привязок и контекста данных.
Что встречается очень редко и только у новичков перешедших с Форм.

Архитектура же MVVM Решения (так же как MVC/MVP) строится, в первую очередь, вокруг Модели.
И для тех у кого мало опыта, плохое понимание архитектуры Решения в целом, очень настоятельно я рекомендую начинать реализацию тоже с Модели.

Вторым компонентом реализуется View.
При реализации View с одной стороны учитывается ТЗ на GUI, а с другой имеющиеся Данные которые надо представлять.
Не имея Модели, при недостаточном опыте, при реализации View можно залезть в такие "дебри", что потребуются горы костылей для её состыковки с Моделью.

И на последнем этапе, уже когда есть Model и View, реализуется связывающее звено между ними - ViewModel.


Такой подход к реализации позволяет как выполнить любое ТЗ на GUI, так и построить приложение с правильной архитектурой, без гор костылей.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 16:43  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Рассуждая "от View" вы поневоле будет делать "некрасивую" реализацию.
вот цитирую вас.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Во первых, я нигде не говорил, что GUI неважен, и его можно делать абы как.
и тут же вы поворачиваетесь на 180.

Но не суть.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 16:58
Цитата Сообщение от Berendom Посмотреть сообщение
и тут же вы поворачиваетесь на 180.
Вы не понимаете меня.

Я не говорю что GUI надо делать "под Модель".
Я говорю, что основой WPF Решения, его архитектeры является Модель.
И для начинающих, с Модели и надо начинать реализацию WPF Решения.

Допустим, у вас есть ТЗ и в нём описан необходимый для приложения GUI.
Заказчику неважно как там внутри всё устроено - он описывает: вот такой вид хочу; хочу на кнпочку нажать и сделалось то-то и т.д. и т.п.

Получив такое ТЗ, вы уже его сами для себя детализируете и разбиваете на отдельные ТЗ для каждой части приложения.
И вот здесь вы уже должны выделить какие данные нужны для этого приложения, как они должны сохраняться/восстанавливаться, как взаимодействовать и т.д.
И эти задачи будут наиболее важными и трудоёмкими в приложении.

Собственно WPF GUI - это 5-10% приложения. А порой и меньше.
Да, в конечном итоге вы получите нужный заказчику GUI и для заказчика это самое важное.
Но при реализации WPF Решения - GUI вторичен.
Как по объёму кода, трудозатратам, так и по функциональности.
Модель может работать с любыми VM и View.
А вот они делаются под конкретную Модель.

Прочитайте: 10) Как создавалось приложение
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.10.2020, 17:45
Элд Хасп,

все еще в объятиях шаблонов и стереотипов существовавших на заре компьютеризации, времен царствования, С, Perl, Pascal и т.д.
Когда программисты сражались имея ограниченный инструментарий для создания Model, и наконец победив ее,
уже не имея сил, времени, и почти без инструментов создания GUI, выдавали в свет потребителям очередную "страшилку" в плане интерфейса.

В эпоху С#, концепция поменялась.
по Model инструментария уже больше чем нужно.
по GUI чего только нет.

Поэтому начинаем c GUI, проверяем сможет ли бабушка зарегистрироваться на сайте ГосУслуг. Получаем одобрение от бабушки.
Ах да Model. Инструментов хоть отбавляй. Можете заниматься ею.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 18:03
кружок-ДДТ, ну и как вы проверите сможет ли бабушка зарегистрироваться на сайте ГосУслуг. Получаем одобрение от бабушки?
Если у вас нет Модели?
Вы или не сможете проверить, или она (Модель) у вас уже есть, но реализована "через Ж".
Если её точно нет, то это гора костылей в Code Behind без Привязок и Контекста Данных.

Ни в одном из этих вариантов не вижу ни какого смысла.
Смысл только в том, что у кого-то плохие знания ООП и неумение полноценно использовать ЯП.
Поэтому "я так вижу...".

Ещё раз пишу.
Можно реализовать любое GUI, в любом виде , с любыми прибамбасами, но это ни как не изменит того, что это всего лишь "лицо" приложения.
И это маленькая толика Решения в целом.
Основная часть Решения - это работа с данными.

В том же проверяем сможет ли бабушка, что такое GUI ?
Два поля и одна кнопка.
А вот всё что связанно с отправкой значений этих полей на сайт, получением подтверждения регистрации - это к GUI не имеет никакого отношения.
И что займёт больше времени и сил: создать два поля и кнопку или всё остальное?

Если даже "всё остальное" реализовано горой костылей в Code Behind - это всё равно не делает это "остальное" частью GUI.
Это просто кривые костыли для работы с Данными.
И сделать их сразу нормально, в полном соответствии с принципами ООП, C#, WPF - может помещать только банальное неумение реализующего прикрывающегося "я так вижу...".
Сделать правильно, согласен, требует больше знаний, но по трудозатратам - это проще.
Особенно учитывая возможные переделки во время реализации, работу в коллективе, последующую поддержку и модернезацию.
1
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.10.2020, 18:37
Цитата Сообщение от Элд Хасп Посмотреть сообщение
кружок-ДДТ, ну и как вы проверите сможет ли бабушка зарегистрироваться на сайте ГосУслуг. Получаем одобрение от бабушки?
бабушку совершенно не волнует наличие Model.
мне б сынок не потеряться, чтоб в глазах не рябило и знать куда, что напечатать и каку кнопку нажать.
а если серьезно. ТЗ, софтина для элеваторов в СХ. Отправил три разных эксэшника (WPF GUI даже без биндинга) местному админу. Тот ездил по объектам (в рамках пункта договора) и показывал местным салохам GUI. Так был выбран вариант GUI
на базе которого уже строилось все остальное. Договор!

И даже потом после приемки, в остаточных работах, они GUI этот пару раз вызывали до-править как им надо.
Model вообще никого не интересовала. Работает и работает.

Как вы там писали? GUI 5-10% от всего объема работ. Так вот по Model издержек вообще не было. А вот по вещам связанным с GUI чуть не вышли за лимит.
Вот вам и 5-10.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 18:52
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
бабушку совершенно не волнует наличие Model.
Но не бабушке реализовывать Решение.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
а если серьезно. ТЗ, софтина для элеваторов в СХ....
Я уже писал выше и в других темах.
Заказчик не программист.
Естественно он описывает не то как программа должна работать, из каких частей она должна состоять.
Он описывает какой результат и в каком виде он хочет получить.
То есть чаще всего это ТЗ ограничивается описанием GUI.
И часто различные переделки GUI превалируют для заказчика над другими доработками.

Но при чём здесь архитектура Решения реализующего это ТЗ?
Все паттерны (MVVM, MVC, MVP и др.) направленны как раз таки на то чтобы "развязать" GUI и остальные слои приложения.
Нужно переделать GUI - пожалуйста.
Паттерн только предоставляет возможность его переделки без затрагивания остальных частей приложения.

Если же у вас и так реализовано возможность изменения GUI без влияния на остальную часть приложения.
Тогда вы значит, может и криво, но всё таки реализовали один из паттернов.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Как вы там писали? GUI 5-10% от всего объема работ. Так вот по Model издержек вообще не было. А вот по вещам связанным с GUI чуть не вышли за лимит.
5-10% не надо принимать за абсолют.
Это скажем так "средняя температура по палате".
Конечно, задачи бывают разные.
Какой-нибудь, допустим, супер-пупер калькулятор.
Что за Модель? 2+2 и 2*2 - и всё.
А вот возни с GUI, чтобы привлечь пользователей, может быть море.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 19:25  [ТС]
народ что делать то!? чихать мне с чего начинать.

Дайте плиз код!

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
class MainWindowViewModel : ViewModelBase
    {
 
        // свойство
        public const string SelectedItemPropertyName = "SelectedItem";
 
        private long? _selectedItem;
 
        public long? SelectedItem
        {
            get
            {
                return _selectedItem;
            }
            set
            {
                Set(SelectedItemPropertyName, ref _selectedItem, value);
                Load(value ?? -1);
            }
        }
 
        //метод берет из свойства число и передает его далее в свое тело 
        public void Load(long? number)
        {
             // здесь используется это число
        }
 
    }
 
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 19:43
Цитата Сообщение от Berendom Посмотреть сообщение
Дайте плиз код!
Код чего?

Я уже сколько вариантов вам дал.
Целиком вашу задачу я не знаю.
И понять что вам нужно, почему не устраиваю предложенные варианты - понять не могу.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 20:06  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Целиком вашу задачу я не знаю.
и не нужно знать целиком.

выполнить метод Load из другого класса или из другой VM, и чтобы метод Load не просто выполнялся в холостую, а
забирал текущее значение из свойства. Все!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 22:13
Цитата Сообщение от Berendom Посмотреть сообщение
выполнить метод Load из другого класса или из другой VM, и чтобы метод Load не просто выполнялся в холостую, а
забирал текущее значение из свойства. Все!
Какие варианты из предложенных вы опробовали, какой результат получили и чем каждый из них вас не устраивает.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 22:41  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Какие варианты из предложенных вы опробовали, какой результат получили и чем каждый из них вас не устраивает.
все и в том числе названный вами как "корявый". Они работают в холостую.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 22:51
Цитата Сообщение от Berendom Посмотреть сообщение
все и в том числе названный вами как "корявый". Они работают в холостую.
Что значит в холостую?
Покажите полный код - лучше GiHub или архив примера решения.
И объясните на нём: "Нажал эту кнопку - появилось то-то, нажал ту - ни чего не вышло, а ожидалось то-то".
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 22:57  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что значит в холостую?
в холостую - значит метод исполняется, но значения свойства не забирает и соответственно не передает. т.е. передается null.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 23:03
Цитата Сообщение от Berendom Посмотреть сообщение
в холостую - значит метод исполняется, но значения свойства не забирает и соответственно не передает.
Я не могу телепатически угадать причину не видя кода реализации.

Добавлено через 4 минуты
Berendom, мы так и будем играть в угадайку?
Если бы вы выложили в самом начале пример решения и нормально объяснили, то уже давно был бы получен ответ.
А так до сих пор общаетесь шарадами - мне надоело их угадывать.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
17.10.2020, 23:11  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А так до сих пор общаетесь шарадами - мне надоело их угадывать.
куда уж больше и архив в теме, и в постах код несколько раз повторяется. Что еще нужно?
Ладно сам додумаю, время есть.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.10.2020, 23:58
Цитата Сообщение от Berendom Посмотреть сообщение
куда уж больше и архив в теме
Вот решение Как поднять RaisepropertyChanged отдельного свойства извне?
В нём всё работает и метод Load вызывается и из основного окна и из диалогового.

Вы какую реализацию используете, что у вас ни чего "не работает".

Добавлено через 25 минут
RaisePropertyChanged(Berendom1).7z
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
18.10.2020, 19:30  [ТС]
Элд Хасп,

Добрый вечер,
вот это не пойму. Как связано с методом Load?

C#
1
2
3
4
5
6
        private readonly Action update;
 
        public DialogWindowViewModel(Action update)
        {
            this.update = update ?? throw new ArgumentNullException();
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
18.10.2020, 19:38
Цитата Сообщение от Berendom Посмотреть сообщение
вот это не пойму. Как связано с методом Load?
Ну, надо было как-то передать диалогу ссылку на исполняющий метод.
Я реализовал это через передачу делегата в конструкторе диалога.
Что это за метод, как и где он реализован Диалог не знает.
Всё что ему нужно - это вызвать его по команде.

С методом Load экземпляр Диалога связывается уже при его создании в методе ExecuteCallDialog команды CallDialog:
C#
48
49
50
51
52
53
54
55
56
57
58
59
60
        // Command 
        private RelayCommand _callDialog;
        public RelayCommand CallDialog => _callDialog
                    ?? (_callDialog = new RelayCommand(ExecuteCallDialog));
 
        // Commands method
        private void ExecuteCallDialog()
        {
            var vm = new DialogWindowViewModel(Load);
 
            var _dialogWindow = new DialogWindow() { DataContext = vm };
            _dialogWindow.ShowDialog();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2020, 19:38

Как выставить значение true свойства MdiList для пункта меню ArrangeIcons в menuStrip, если там этого свойства нет?
В лабораторной работе нужно выполнить некоторые шаги: в одном из них, одному из пунктов меню - Arrange Icons, созданного в menuStrip, нужно...

Как сделать доступ извне
Всем привет. Не могли бы подсказать нубу практическиские шаги, как сделать вот какую вещь: Есть комп с windows 8.1, на котором стоит...

Как передать код компилятору извне?
Хочу написать красивую оболочку со всякими штуками. Можно ли написать саму оболочку и передавать код компилятору паскаль, чтоб не писать...

Как извне подключиться к ftp localhost?
Вопрос, на самом деле, простой, но вот первый раз сталкиваюсь, а у кого спросить, неизвестно, что и привело меня на этот форум. Сервер ftp...

Как закрыть модальное окно извне?
Добрый день! Не могу уже несколько дней разобраться как реализовать следующее: У меня есть основная форма MainForm Из нее...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Скрипты 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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru