在Silverlight中实现MVVM:异步执行问题

时间:2012-10-09 18:15:22

标签: silverlight mvvm

您好我遇到了问题,无法找到合适的解决方案。 在我的视图中,我有几个Combobox,需要从Viewmodel填充。 View的DataContent定义如下:

<navigation:Page.Resources>
    <viewModel:TheViewModel x:Key="viewModel"/>
</navigation:Page.Resources>

<navigation:Page.DataContext>
    <Binding Source="{StaticResource viewModel}"/>
</navigation:Page.DataContext>

然后在ViewModel构造函数中,我有如下代码:

LoadOperation<ProducType> loadPT = context.Load(context.GetProducTypeQuery());
    loadPT.Completed += (sender1, e1) => {
        if (!loadPT.HasError) {
            LoadOperation<Client> loaC = context.Load(context.GetClientQuery());
                loaC .Completed += (sender2, e2) => {
                    if (!loaC.HasError) {
                        ProducTypes = loadPT.Entities;
                        Clients= loaC.Entities;   
                        Remitentes = loadr.Entities;
                     }
                  };
         }
    };

使用这种配置我遇到的问题是我的组合框永远不会被填充因为Silverlight的异步模型,当框架完成创建视图时,上面的代码还没有执行。 我敢肯定这一定是我缺乏知识,我不是新的porgamming但是很新的silverlight,任何帮助请将不胜感激 感谢名单 埃利奥

1 个答案:

答案 0 :(得分:1)

我的ViewModel派生自实现INotifyPropertyChanged的基类。我将我的组合框绑定到我的ViewModel上的公共属性。进行异步调用以获取属性getter中的数据。

以下是一个例子:

视图模型:

public class MyViewModel : BaseViewModel
{
    private List<MyObject> _myObjectlist;
    public List<MyObject> MyObjectList
    {
         get
         {
             if (_myObjectList == null)
             {
                  _ctx.Load(q=>{
                        _myObjectList = q.Value;
                        //INotifyPropertyChanged implementation
                        RaisePropertyChanged("MyObjectList"); 
                   },null);
             }
         }
    }
}