2017-09-15 11 views
0

それはXamarinのアプリケーションだと私はFreshMVVMで実装初期内部の非同期メソッドを呼び出すようにしようとしていますが、動作しているようですしないで働いていません。Xamarin-FreshMVVM initは、非同期方法

バインディングは正しいものの、リストビューは空です。実際に、いくつかのint定数を置く呼び出しを待つと、ListViewが正しく表示されます。

public class MainPageModel : BasePageModel 
{ 
    private IService _service; 
    public List<ModeMenuItem> List { get; set; } 

    public MainPageModel(IService Service) 
    { 
     _service = Service; 
    } 

    public override async void Init(object initData) 
    { 
     base.Init(initData); 

     List = new List<ModeMenuItem>() 
     { 
      new ModeMenuItem() 
      { 
       Name ="Test 1", 
       Image ="\uE7EE", 
       ViewModelType =null, 
       TotalRequests = await _service.Count() 
      }, 
      new ModeMenuItem() 
      { 
       Name ="Test 2", 
       Image ="\uE913", 
       ViewModelType =null, 
       TotalRequests =await _service.Count() 
      }, 
      new ModeMenuItem() 
      { 
       Name ="Test 3", 
       Image ="\uE8CF", 
       ViewModelType =null 
      } 
     }; 
    } 
} 

答えて

3

あなたはListViewあなたはどちらかに必要に提供してデータの人口と初期化を遅らせているので:

  1. あなたのViewModelにINotifyPropertyChangedを実装して、あなたのListプロパティを作成するとき、それを発射。
  2. ListObservableCollectionにしてViewModelのコンストラクタでインスタンス化してから、後でそのインスタンスを作成してください。

また、2つを混在させることもできます。

だから、オプション1は、ちょうどPropertyChangedイベントを高めるために、次のようになります。

public ObservableCollection<ModeMenuItem> List { get; } 
    = new ObservableCollection<ModeMenuItem>(); 

、その後NEWINGせずに新しいコレクションそれをpopluate:

private List<ModeMenuItem> _list; 
public List<ModeMenuItem> List 
{ 
    get => _list; 
    set 
    { 
     _list = value; 
     RaisePropertyChanged(); 
    } 
} 

オプション2は次のようになり

List.Add(); 
+0

偉大な、私は成功とオプション2を使用しました! – user2297037

関連する問題