【问题标题】:Buttons in re-usable user controls可重复使用的用户控件中的按钮
【发布时间】:2017-09-25 11:50:22
【问题描述】:

我有一个用户控件,我想在一个页面中多次重复使用它。我找到了post about a similar problem,但出现了转折:如果我的控件中有TextBox,我可以公开单个属性,如下所示:

public string FirstName
{
   get { return privateTextBox.Text; }
   set { privateTextBox.Text = value; }
}

从我的主视图(有一个视图模型)我访问该属性,如下所示:

MyUserControl personUserControl= new MyUserControl();
personUserControl.FirstName = viewModel.FirstName;

这是我的问题:如果我在自定义用户控件中有一个我想要访问的按钮怎么办。我可以访问它的属性,就像文本框一样,但是事件(主要是Click 事件)呢?

目前,我最好的解决方案是调用委托事件,该事件被(主视图的)视图模型捕获,然后调用另一个事件,但这似乎是一个非常糟糕的设计。

是否不能以类似于属性访问的方式从用户控件访问事件?

附:不,我将 MVVM 和 WinForms 混合在一起并不是一个错误。这是有意的(无论是否聪明)。

编辑: 这个问题与 WinForms 没有太大关系(据我所知),它与使用多层用户控件有关。这就提出了一个问题:我应该将 ViewModel 从上往下通过多层 UserControls,还是应该将 UserControls 的属性向上传递?

【问题讨论】:

  • 您可以使用与属性相同的方式使事件在控件外部可见。
  • @PawełŁukasik 你能举个例子吗?我不知道该写什么(即像public Button_Click myClickEvent这样的东西,除非它应该工作)
  • 而不是public event EventHandler myClickEvent;,但如果您使用MVVM,可能会选择@fabio 的答案
  • 我混合了 MVVM 和 WinForms。这是有意的(聪明与否) - 绝对没有错,Winforms 很好地支持 MVVM(数据绑定)。不如 WPF 强大,但可以在 Winforms 中使用,甚至在 WPF 中也可以使用相同的视图模型。
  • MVVM for winforms的可能重复

标签: c# winforms mvvm


【解决方案1】:

您可以像处理其他属性一样公开事件:

private Button myButton;

public event EventHandler MyButtonClick
{
    add { myButton.Click += value; }
    remove { myButton.Click -= value; }
}

【讨论】:

    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多