【发布时间】:2012-11-06 19:21:56
【问题描述】:
关于 MVVM 模式的问题,我认为我错了。
当视图中发生触地事件时,我想弹出一条消息,即:
private void marker_TouchDown(MessageObject msgData)
{
CustomMessageControl message = new CustomMessageControl() {Width = 610, Height = 332};
CustomMessageViewModel messageVM = new CustomMessageViewModel(msgData);
message.DataContext = messageVM;
//Add to canvas
}
我的视图模型:
public class CustomMessageViewModel
{
public MessageObject message { get; set; }
public CustomMessageViewModel(MessageObject message)
{
this.MessageObject = message;
}
}
这可行,但感觉不对。这是填充视图模型的可接受方式吗?
【问题讨论】:
-
通常视图模型将使用 INPC 接口 (msdn.microsoft.com/en-us/library/…) 来支持通知视图/消费者属性已更新。在这种情况下附加时,我强烈建议不要将代码中的数据上下文重新定义为新的视图模型。
-
感谢 Quinton,我了解 INPC 的使用。我可能从字面上看这个,但这里有人点击一个视图,我想启动一个新视图,传递一些与他们点击的点相关的数据。
-
请原谅我浏览了代码,您确实在做通常被认为是正确的事情,它在代码中可能看起来不那么漂亮,但它是实例化数据并将数据传递给视图模型的标准方式,有几个 MVVM 框架可以帮助您在设计中缓解这种情况,您可能会感兴趣,但如果您想手动处理这一切,这通常是公认的方法。
-
@QuintinRobinson 不正确,视图模型正在创建用户界面元素;这违反了 MVVM 支持的关注点分离。
-
@casperOne 你说得对,对不起,我没有说清楚,控件的生成不是我所指的,而是用相关数据实例化视图模型。