Реализация события при изменении свойств обьекта (C#, WPF) - вопрос №311363

Есть формы OuterForm(Внешняя форма) и InnerForm(Внутренняя форма), внутренняя вызывается по нажатию баттона на внешней. Есть обьект MyObject с тремя свойствами A, B, C и полями a, b, c соответственно, который обьявлен в OuterForm и передается в качестве параметра в InnerForm. Ввести данные для изменения обьекта и изменить его можно только в InnerForm нажатием кнопки «Применить».

Вопрос: Как написать такое событие дляобьекта, которое будет происходить, если после нажатия кнопки «Применить» на InnerForm одно или несколько полей/свойств обьекта MyObject будут изменены.



Дополнение автора от 24.07.12 18:52:33

Пока я добился только того, что при изменении отдельного поля (сеттеры указывают на поля) срабатывает событие. Проблема состоит в том, что мне не надо, чтобы оно каждый раз срабатывало, то есть 3 раза вместо одного :)

Если сделать так, чтобы событие срабатывало только если все  поля изменятся — тоже не прокатит, ибо возможно, пользователь изменит только 2 свойства — 2 это не есть 3 — потому событие не сработает. А нужно чтобы сработало.

Главное — достигнуть цели, если получится, то можно и без событий обойтись. 

24.07.12
4 ответа

Лучший ответ по мнению автора

по этому обьяснению не понятно что именно Вы хотите отлавливать и как?

просторо для творчества тут безграничный

если интересуют события только в дочерней форме — вообще нет смысла насиловать обьект, все можно отследить на событиях изменения полей ввода и нажатия кнопок «применить» и «отмена»

если свойства обьекта могут изменяться из других форм или програмно — тогда есть смысл отслеживать события изменений, но нет ни какой проблемы создавать 3 разных события

на пример когда Вы создаете новую форму — это тоже обьект, и если на ней 3 разных текстбокса, из изменения повлекут возникновение 3х разных событий

ведь такой подход не вызывает у Вас сомнений как работать с экранной формой?

так что природа проблемы все еще не понятна

Вы определитесь какую конечную цель преследуете?

отследить изменение каждого отдельного свойства?

или по окончанию обработки обьекта в дочерней форме, получить сведения о том какие свойства были изменены?

в последнем случае опять не нужно насиловать обьект — при изменение одних только полей ввода (чекбоксов или иных контролов), дочерняя форма получает знание, что есть изменения которые можно применить

на момет закрытия, форма без проблем может имееть занние о том отвергнуты изменения или применены?

и нет ни каких проблем перед закрытим сформировать отчет об итогах в таком формате в котором он нужен, и передать в вызывающую форму

24.07.12
Лучший ответ по мнению автора

Другие ответы

если обьясните предметно, ответ может оказаться совсем другим

возможно Ваша проблема типовая и имеет типовое решение

24.07.12

Более конкретный пример:

Есть та же внутренняя и внешняя форма, класс, который инкапсулирует в себе данные о пользователе: сервер, логин, пароль.

Если мы зайдем во внутреннюю форму, изменим данные(будь это либо одно поле, либо все)  и нажмем «Применить»(При нажатии на данную кнопку после применения изменений форма закрывается) — на внешней форме должен остановиться поток, создаться и начаться новый. Эту работу с потоками я хочу реализовать так: при инициализации внешней формы PersonObject += WokrWithWreads; (Работа с потоками)

24.07.12

подозреваю что нет прямой связи между характером реакции на события — запускаете ли Вы потоки или останвливаете, или иные действия

Вам нужно уложить в голове взаимосвязи событий-причин и событий-следтсвий происходящих в формах

строго говоря я уже все сказал, раз у Вас не получается интерпретировать сказанное — давайте проект, в коде будет проще показать

ps конкретика в данном случае это:

— WPF или WinForms?

— модальный вызов формы или не модальный?

… и так далее

24.07.12

если Вы еще не в курсе — событийная модель это свойство интерфейса

для WPF своя реализация, для WinForms своя

на обьект (экземпляр класса) из предметной области, в принципе не следует распространять такй же стиль мышления как на интерфейс

по всей видимости основная Ваша проблема в данном случае в этом

так что все что Вам реально нужно, уже сказано в первом моем ответе на этот вопрос

24.07.12
Посмотреть всех экспертов из раздела Технологии > .Net/C#
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store