我想从ViewModel调用AutoComepleteBox的PopulateComplete() 我怎么称呼它?
答案 0 :(得分:2)
使用System.Windows.Interactivity的行为是一种很好的方法。
看看这个 - http://julmar.com/blog/mark/?p=34 - 在这种情况下,他正在使用它作为水印,但你可以很容易地调整行为...我经常将这篇博文作为起点。
关于行为的主要问题是,您可以访问那些您无法在视图模型中无法附加的事件,需要几分钟才能解决它们,但有一天晚上在沙发上阅读一些博客和MSDN,你将成为一个大粉丝!
答案 1 :(得分:1)
View应该处理与用户界面和视图有关的所有事情 - 理想情况下,您应该从视图本身调用PopulateComplete()
。根据您对BrandonZeider的回答的评论,我建议您在ViewModel上创建一个事件,该事件在服务方法完成时触发,并在视图中将您的PopulateComplete()
调用放入该事件的处理程序中。
现在您可以在任何地方使用ViewModel - 如果在服务调用完成时需要在视图上发生某些事情,它可以直接订阅新事件。
答案 2 :(得分:-1)
有几种不同的方法可以实现这一点,它只取决于你想要做什么......你在ViewModel中试图调用PopulateComplete()的位置?例如,如果您在ICommand的实例中,则可以将控件作为参数传入,转换它并调用您的方法。
根据你的评论,我会采用一种不同的方式。由于控件的局限性,它将涉及一些解决方法。
在后面的代码中向视图添加事件侦听器,在视图模型中侦听集合的集合更改事件。然后,您可以在事件处理程序中调用PopulateComplete()。您需要在视图中引用ViewModel才能使其生效。
另一种选择是在View加载(使用EventTrigger)时将对AutoComepleteBox的引用传递给ViewModel,并将此引用存储在私有字段中。然后,当您的Web服务调用返回时,使用此引用调用PopulateComplete()。