如何在Silverlight中使用MVVM处理每个控件w /命令模式的多个事件?

时间:2009-02-19 23:07:12

标签: silverlight mvvm command

是否有人使用SLExtensions命令模式(http://www.codeplex.com/SLExtensions)将命令与Silverlight控件事件相关联?从我所看到的,你只能为每个控件附加一个事件的命令。例如,您只能为按钮添加click事件,为文本框添加keydown事件等。

如果我想为每个控件添加多个事件怎么办?例如,如果我想为按钮的Click和Drop事件添加命令,该怎么办?开箱即用似乎没有办法用SLExtensions代码处理这个问题。

BTW,这是在Model-View-ViewModel(MVVM)上下文中。

3 个答案:

答案 0 :(得分:0)

您在XAML中连接的事件有点受限,但是如果SLExtensions自然不支持,那么在代码隐藏/视图模型中没有什么可以阻止您这样做。

if (action == dropped)
{
  Commands.Dropped.Execute();
else
{
  Commands.Clicked.Execute();
}

或者其他......如果我误解了你,你想做的一些示例代码会有所帮助。

答案 1 :(得分:0)

dwynne - 你是绝对正确的。我可以使用您指定的代码处理drop事件。但是,我仍然需要在我的代码隐藏中实现事件处理程序,然后从那里调用我的ViewModel。我试图通过尝试消除编码事件处理程序到我的代码隐藏来坚持MVVM。相反,我想通过使用附加的命令直接将我的XAML连接到我的ViewModel。

SLExtensions库允许您执行此操作,但(根据我的经验)每个控件只允许一个事件(单击按钮,文本框的keydown等)。对于任何非平凡的应用程序,这是不够的,并且您的MVVM实现中断了。

很抱歉没有使用评论区域,但300个字符有点限制。 StackOverflow人员 - 您需要达到此限制。

答案 2 :(得分:0)

我不熟悉SLExtensions,但在WPF中,每个控件都有一个命令的限制,它与控件实现相关联。如果您想要为另一个事件执行命令,则必须自己连接。但是,有一种解决方案不需要您在附加行为的代码中进行此布线。事实上,Caliburn(http://www.codeplex.com/caliburn)以其“行动”概念来做到这一点。我很长一段时间没有看过Caliburn,也不知道它是否与Silverlight兼容,但是你当然可以研究一下如何将Action编成法典并实现自己的。