如何使用应用程序控制器关闭表单?
How do I close a form using app Controller?
有一个 AppController - 管理所有表单。
我在下面的 appController 中管理表单,但在那里我只能打开它们。马上又要问了,怎么关闭?另外,当我在同一个 window 之上打开它时,同一个 window 打开了。我该如何摆脱这个?我试过form == null form.IsDisposed,但是有点不对。
public class AppController : IAppController
{
private readonly Mainform_medicalrecord _mainform;
public IDataContext DataContext { get; }
public IMessageService MessageService { get; }
public AppController(IDataContext dataContext, IMessageService messageService)
{
DataContext = dataContext ??
throw new ArgumentNullException(nameof(dataContext));
MessageService = messageService ??
throw new ArgumentNullException(nameof(messageService));
var vm = new MainViewModel(this);
_mainForm = new MainForm_MedicalRecord(vm);
}
public Form GetMainForm()
{
return _mainForm;
}
public void ShowCardView()
{
var vm = new CardViewModel(this);
var form = new CardView(vm);
form.Owner = _mainForm;
form.ShowDialog();
}
}
视图模式
public CardViewModel(AppController appController)
{
_appController = appController
?? throw new ArgumentNullException(nameof(appController));
}
throw new ArgumentNullException(nameof(appController));
}
卡片视图
public CardView(CardViewModel cardViewModel)
{
InitializeComponent();
_viewModel = cardViewModel ??
throw new ArgumentNullException(nameof(cardViewModel));
}
我会补充...打开表格时,它是重复的,我根本不需要。请帮助我。
根据评论阐述我的想法并举个例子:
private CardView cardView = null;
public void ShowCardView()
{
if( null == cardView )
{
var vm = new CardViewModel(this);
cardView = new CardView(vm);
cardView.Owner = _mainForm;
}
cardView.Show();
}
请注意,这 不是线程安全的 !在这里,您的控制器只会创建一个新的(单独的)表单,如果还没有的话。这避免了“重复”表单。
不过,您应该为此代码添加一些线程安全措施。
如果你有,你可以添加一个关闭方法:
// Again: TODO Add thread safety!
public void CloseCardView()
{
cardView?.Close();
cardView = null;
}
...如果你真的需要它。我认为隐藏表单可能就足够了。
有一个 AppController - 管理所有表单。
我在下面的 appController 中管理表单,但在那里我只能打开它们。马上又要问了,怎么关闭?另外,当我在同一个 window 之上打开它时,同一个 window 打开了。我该如何摆脱这个?我试过form == null form.IsDisposed,但是有点不对。
public class AppController : IAppController
{
private readonly Mainform_medicalrecord _mainform;
public IDataContext DataContext { get; }
public IMessageService MessageService { get; }
public AppController(IDataContext dataContext, IMessageService messageService)
{
DataContext = dataContext ??
throw new ArgumentNullException(nameof(dataContext));
MessageService = messageService ??
throw new ArgumentNullException(nameof(messageService));
var vm = new MainViewModel(this);
_mainForm = new MainForm_MedicalRecord(vm);
}
public Form GetMainForm()
{
return _mainForm;
}
public void ShowCardView()
{
var vm = new CardViewModel(this);
var form = new CardView(vm);
form.Owner = _mainForm;
form.ShowDialog();
}
}
视图模式
public CardViewModel(AppController appController)
{
_appController = appController
?? throw new ArgumentNullException(nameof(appController));
}
throw new ArgumentNullException(nameof(appController));
}
卡片视图
public CardView(CardViewModel cardViewModel)
{
InitializeComponent();
_viewModel = cardViewModel ??
throw new ArgumentNullException(nameof(cardViewModel));
}
我会补充...打开表格时,它是重复的,我根本不需要。请帮助我。
根据评论阐述我的想法并举个例子:
private CardView cardView = null;
public void ShowCardView()
{
if( null == cardView )
{
var vm = new CardViewModel(this);
cardView = new CardView(vm);
cardView.Owner = _mainForm;
}
cardView.Show();
}
请注意,这 不是线程安全的 !在这里,您的控制器只会创建一个新的(单独的)表单,如果还没有的话。这避免了“重复”表单。
不过,您应该为此代码添加一些线程安全措施。
如果你有,你可以添加一个关闭方法:
// Again: TODO Add thread safety!
public void CloseCardView()
{
cardView?.Close();
cardView = null;
}
...如果你真的需要它。我认为隐藏表单可能就足够了。