可重复使用的用户控件中的按钮

时间:2017-09-25 11:50:23

标签: c# winforms mvvm

我有一个UserControl,我想在一个页面内多次重复使用。我找到了一个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事件)呢?

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

是否无法以与属性访问类似的方式访问用户控件中的事件?

P.S。不,我混合MVVM和WinForms并不是一个错误。这是有意的(聪明与否)。

编辑:这个问题与WinForms(我可以告诉的)没有多大关系,因为它与使用多层UserControl有关。这就提出了一个问题:我是应该从顶层向下传递ViewModel还是向下传递多层UserControls,还是应该向上传递UserControls的属性?

1 个答案:

答案 0 :(得分:3)

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

private Button myButton;

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