Если вы используете WinForms, вы должны использовать шаблон проектирования MVP (Model-View-Presenter). В этом случае каждый вид имеет свой собственный ISomethingView
, который содержит свойство и событие, например:
public interface IBaseView
{
void Show();
void Close();
}
public interface ILoginView : IBaseView
{
string Login { get; }
string Password {get; }
event EventHandler SignIn { get; }
}
И теперь ваш UserControl должен реализован этот интерфейс.
Кроме того, для каждого просмотра у Вас должен создать ведущий, который отвечает за связь между видом и бизнес-логики:
public LoginPresenter
{
// private variables
public LoginPresenter(ILoginView loginView, IOtherView otherView)
{
this.loginView = loginView;
this.otherView = otherView;
this.loginView.SignUp += OnSignUp;
}
private void OnSignUp(object sender, EventArgs eventArgs)
{
if (this.authService.Login(this.loginView.UserName, this.loginView.Password))
{
this.loginView.Close();
this.otherView.Show();
}
}
}
Вы можете использовать DI контейнер, чтобы решить все I*Vies
, например:
public class LoginUserControl : UserControl, ILoginView
{
public LoginUserControl()
{
this.loginPresenter = new LoginPresenter(this, DIContainer.Resolve<IOtherView>());
}
}
Вы используете архитектуру MVVM с WinForms? У вас есть четко определенные объекты домена/бизнес-объекта? Нам нужна дополнительная информация о масштабах и дизайне вашего приложения. – Dai
Я отмечаю, что если вы хотите следовать абсолютным лучшим практикам, вы, возможно, не используете WinForms. Что такое бизнес-обоснование использования WinForms вместо WPF? – Dai
В настоящее время проект прост, класс Employee является частью классов моделей, созданных EF, и я хочу следовать шаблону MVP. – apaz