1

こんにちは、問題に直面しており、適切な解決策が見つかりません。私のビューには、ビューモデルから入力する必要があるいくつかのコンボボックスがあります。ビューの 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 の非同期モデルが原因で、コンボボックスが読み込まれないという問題があります。これは私の側の知識不足に違いないと確信しています。私はポーガミングの初心者ではありませんが、シルバーライトの初心者です。

4

1 に答える 1

1

私の ViewModels は、INotifyPropertyChanged を実装する基本クラスから派生しています。コンボボックスを ViewModel のパブリック プロパティにバインドします。プロパティ ゲッターでデータを取得する非同期呼び出しを配置し​​ます。

次に例を示します。

ビューモデル:

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);
             }
         }
    }
}
于 2012-10-09T18:25:46.263 に答える