如何从ViewModel(MVVM)调用UI控件方法
本文关键字:调用 UI 控件 方法 MVVM ViewModel | 更新日期: 2023-09-27 17:49:29
我想从ViewModel调用AutoComepleteBox的PopulateComplete()怎么命名呢?
使用System.Windows.Interactivity的行为是一个很好的方法。
看看这个- http://julmar.com/blog/mark/?p=34 -在这种情况下,他正在使用它的水印,但你可以很容易地适应的行为…我经常引用这篇博文作为起点。
关于行为的主要事情是,你可以访问你不能访问的东西,你不能在视图模型中附加的事件,它需要几分钟才能弄清楚它们,但是一个晚上躺在沙发上阅读一些博客和MSDN,你会成为一个大粉丝!
视图应该处理与用户界面和视图有关的一切-理想情况下,您应该从视图本身调用PopulateComplete()
。根据你对BrandonZeider的回答的评论,我建议你在ViewModel上创建一个事件,当服务方法完成时触发,并将你的PopulateComplete()
调用放在该事件的处理程序中,在视图中。
现在你可以在任何地方使用ViewModel——如果在服务调用完成时需要在视图上发生某些事情,它可以简单地订阅新事件
有几种不同的方法来完成这一点,它只是取决于你想做什么…从哪里在你的ViewModel你试图调用PopulateComplete()?例如,如果您在iccommand的实例中,您可以将控件作为参数传入,对其进行强制转换并调用您的方法。
根据你的评论,我想用不同的方式来处理这件事。由于控件的局限性,这将涉及到一些变通方法。在后面的代码中将事件侦听器添加到视图中,监听视图模型中集合的集合更改事件。然后可以在事件处理程序中调用PopulateComplete()。你需要在你的视图中引用你的ViewModel来让它工作。
另一个选项是在视图加载时(使用EventTrigger)将AutoComepleteBox的引用传递给ViewModel,并将此引用存储在私有字段中。然后,当您的web服务调用返回时,使用此引用调用PopulateComplete()。