我有一个使用elementhost显示视图的winform。在我的winform上,我有一个winform按钮,当我点击我的视图上的按钮时,我想隐藏它。有没有办法实现这个目标?我只是想知道如何通过我的视图模型与winform进行交互。
form.cs
VModel.DisableBtn += new ViewModel.EventHandler(_viewmodel_DisableExitFormButton);
void _viewmodel_DisableExitFormButton()
{
btnExitForm.Enabled = false;
}
XAML
<Button Name="btnSave" Command="{Binding SaveToDatabase}" />
视图模型
private ViewModel _viewModel;
private ViewModel VModel
{
get
{
if (_viewModel == null)
{
_viewModel = new ViewModel();
}
return _viewModel;
}
set
{
_viewModel = value;
}
}
public delegate void EventHandler();
public event EventHandler DisableBtn;
public ICommand SaveToDatabase
{
get
{
if (SaveToDatabase == null)
{
SaveToDatabase = new RelayCommand(p => SaveToDB());
}
return SaveToDatabase;
}
}
private void SaveToDB()
{
DiasbleExitFormBtn();
}
private void DisableExitFormBtn()
{
// need to disable form button here
}
答案 0 :(得分:0)
在Winfrom中,您可以注册一个ViewModel事件,该事件将在您按View中的按钮时播放,然后在发生此事件时隐藏您的按钮。
例如:
ViewModel:
public delegate void SomeHandler();
public event SomeHandler YourEventName;
在你的winfrom注册活动中:
YourViewModel.YourEventName+=new YourViewModel.SomeHandler(Event_YourEventName);
void Event_YourEventName()
{
//HIDE YOUR BUTTON
}
在视图中按下按钮时,按命令运行事件。
希望这个帮助
编辑:
将此添加到您的视图模型
private void OnButtonClicked()
{
if (YourEventName!= null)
{
YourEventName();
}
}
并在您的命令中调用此函数
private void DisableExitFormBtn()
{
OnButtonClicked();
}
这应该引发事件并运行位于winfrom的函数。
答案 1 :(得分:0)
您应该添加此代码以触发事件DisableBtn
private void DisableExitFormBtn()
{
if(DisableBtn!=null)
{
EventArgs e = new EventArgs();
DisableBtn(this, e);
}
// need to disable form button here
}
更改以下内容:
public delegate void EventHandler(); // Comment this line or remove it
public event EventHandler DisableBtn;
将其更改为:
void _viewmodel_DisableExitFormButton(object sender, EventArgs e)
{
btnExitForm.Enabled = false;
}