【发布时间】:2012-11-26 17:23:53
【问题描述】:
设置如下: 我有一个由从 WCF 服务获取数据的视图模型填充的自动完成框。所以到目前为止它非常简单明了。
现在,我正在尝试遵循 MVVM 的原则,即视图模型对视图本身一无所知。这很好,因为我将自动完成框的填充事件绑定到我的视图模型via triggers and commands 的方法。
所以视图模型正在获取数据,而视图正在等待。还没有问题。
现在,视图模型获得了数据,我将结果集合传递给绑定到控件的 ItemSource 属性的属性。屏幕上什么也没有发生。
我去 MSDN 并找到官方批准的方式来处理这种情况 (http://msdn.microsoft.com/en-us/library/system.windows.controls.autocompletebox.populating(v=vs.95).aspx):
将 MinimumPrefixLength 和 MinimumPopulateDelay 属性设置为 值大于默认值,以最大限度地减少对 Web 服务的调用。
处理 Populating 事件并设置 PopulatingEventArgs.Cancel 属性为真。
进行必要的处理并将 ItemsSource 属性设置为 所需的项目集合。
调用 PopulateComplete 方法以指示 AutoCompleteBox 显示 下拉菜单。
现在我看到最后一步的一个大问题,因为我不知道如何从视图模型中调用视图上的方法,前提是他们不知道(也不应该知道!)任何关于彼此。
那么我到底应该如何在不违反 MVVM 原则的情况下从视图模型中调用 PopulateComplete 视图方法?
【问题讨论】:
标签: mvvm silverlight-4.0 silverlight-toolkit