winforms 如何从元素主机视图模型触发winform按钮

3npbholx  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(131)

我有一个使用elementhost显示视图的winform。在我的winform上,我有一个winform按钮,当我的视图上的按钮被点击时,我想隐藏它。有什么方法可以实现这个目的吗?我只想知道我如何通过我的视图模型与winform交互。
form.cs

VModel.DisableBtn += new ViewModel.EventHandler(_viewmodel_DisableExitFormButton); 

void _viewmodel_DisableExitFormButton()
{
    btnExitForm.Enabled = false;
}

克萨姆勒

<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
}
3wabscal

3wabscal1#

在WinForm中,您可以注册到ViewModel的一个事件,当按下视图中的按钮时,该事件将播放,然后在此事件发生时隐藏您的按钮。
例如:
视图模型:

public delegate void SomeHandler();

public event SomeHandler YourEventName;

在您的WinForm中注册此事件:

YourViewModel.YourEventName+=new YourViewModel.SomeHandler(Event_YourEventName);

      void Event_YourEventName()
        {
            //HIDE YOUR BUTTON
        }

在视图中按下按钮时,通过命令运行事件。
希望这能有所帮助
编辑:
将其添加到视图模型中

private void OnButtonClicked()
    {
        if (YourEventName!= null)
        {
            YourEventName();
        }
    }

在对这个函数的命令调用中

private void DisableExitFormBtn()
{
    OnButtonClicked();
}
    • 这将引发事件并运行位于WinForm中的函数。**
xdyibdwo

xdyibdwo2#

应添加以下代码以激发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;
}

相关问题