2

私は mvvmcross を使用しています (とても楽しいです) が、mvxlistview から項目を追加および削除する際に問題が発生し続けます:

私のビューは、Web サーバーから取得されたアイテムのリストにバインドされているため、別のスレッドで実行されます。

async void  ActivateSearchInvoked ()
    {
        _activeSearchViewModel.IsLoading = true;
        await _activeSearchViewModel.Search (SearchString);
        _activeSearchViewModel.IsLoading = false;
    }   

Search は InnerSearch を呼び出すメソッドです。View Model のコードは次のとおりです。

protected override Task InnerSearch ()
    {
        Users.Clear ();
        return Task.Factory.StartNew (SearchForUsers);
    }

    protected virtual void SearchForUsers()
    {
        int requestringUserID = AppConfiguration.Instance.User.ID;
        List<User> users = GetUsersFromWeb();
        if(users == null)
        {
            return;
        }
        foreach (var item in users)
        {
            Users.Add (new UserViewModel (item));
        }
        RaisePropertyChanged (() => Users);
    }

これは、画面が更新されるまで (たとえば、画面を回転させる) 正しく動作しないようです。

ありがとう

アミット

4

1 に答える 1

3

別のソース List または INotifyCollectionChanged サポート コレクションを実際に使用していない限り、MvxAdapter は変更通知を受け取りますが、実際には、実行する作業があることを認識しません。

これを回避するには、次のいずれかを行います。

  • 新しいリストを使用する
  • ObservableCollection の使用に切り替える
  • 変更が発生していないように見える場合でも、常に変更通知に応答するカスタム IMvxAdapter を実装します。これを行うには、https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Droid/Views/MvxAdapter.cs でオーバーライドしますif (_itemsSource == value) return;SeItemsSource
于 2013-08-12T07:10:27.333 に答える