VB.net Raising Events ... путаница! MVC - PullRequest
1 голос
/ 23 апреля 2009

Я новичок в MVC и бизнес-объектах, но изо всех сил пытаюсь понять, как вызвать обновление формы, когда в моей бизнес-логике происходит обновление.

Это не проблема для 95% моих форм, потому что они вызывают обновление из формы, которую нужно обновить.

Однако, в некоторых случаях внутренняя форма делает и обновляет, которая требует внешней формы, чтобы отразить это. Я читал о дескрипторах, делегатах, AddressOf и т. Д., И тону в опциях.

Проще говоря, мне нужно, чтобы произошло три вещи 1. Form2 (внутренняя форма) обновила информацию, поэтому пользователь нажимает кнопку Сохранить 2. Сохраните вызовы моего уровня доступа к данным и обновите базу данных 3. Form1 (внешняя форма) имеет DataGrid, о котором необходимо уведомить, чтобы он мог обновляться через Sub LoadGrid

Это стадия 3, которую я не могу сделать. Как мне вызвать Sub в Form2 (LoadGrid), чтобы сделать обновление из внешнего класса. Если я смогу просто заставить это работать, я уверен, что извлеку уроки из этого для других сценариев.

1 Ответ

1 голос
/ 23 апреля 2009

Я не уверен на 100% в том, как MVC это делает, но я достиг чего-то похожего.

В моем классе бизнес-уровня

Class BL
public event doneUpdate(o as object, e as eventArgs)

sub method doDBUpdate()

'do your stuff

RaiseEvent doneUpdate(o,e) 
end sub

End Class

Class Form
dim withEvents bl as BL

sub g handles bl.doneUpdate(o as object , e as eventargs)
  'rebind
end sub 

End Class

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

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

Надеюсь, это поможет

EDIT:

Привет, Митч

Параметры, передаваемые из события в обработчик, могут быть любыми, хотя Microsoft Coding Convention говорит, что вы должны передать объект, а событие возвращает аргументы.

Если вы объявите свое мероприятие следующим образом

Public Event myEvent(dim updated as Boolean) 

и затем иметь ручки sub с такой же подписью

Public Sub handler(byval updated as Boolean) handles myClass.myEvent

тогда вы должны иметь возможность обновлять значение (это только пример)

Единственное, что вы можете проверить, это то, что вы создаете экземпляр своего бизнес-класса, как в случае событий

Dim WithEvents myBL as new BusinessLayer

Если это все еще не работает (если это в WinForms, а не asp.net), вам может понадобиться что-то вроде

AddHandler myBl.myEvent AddressOf handler

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...