【发布时间】: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的可能重复