我有一个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的属性?
答案 0 :(得分:3)
您可以像处理其他属性一样公开事件:
private Button myButton;
public event EventHandler MyButtonClick
{
add { myButton.Click += value; }
remove { myButton.Click -= value; }
}