2014-11-28 5 views
0

크로스 플랫폼 앱을 개발하기 위해 mvvmcross를 사용하고 있습니다. 가장 눈에 띄는 방식으로 도움이됩니다.Mvvmcross 로딩 표시기가 보이지 않습니다.

로드 중 표시기에 약간의 문제가 있습니다.

는 내가 아래와 같이 그 안에 두 개의 뷰 모델의 인스턴스를 생성 MainViewModel이 지금 내 BaseViewModel

public abstract class BaseViewModel : MvxViewModel 
    { 
     #region IsLoading 

     private bool _IsLoading; 
     public bool IsLoading 
     { 
      get { return _IsLoading; } 
      set 
      { 
       _IsLoading = value; 
       RaisePropertyChanged(() => IsLoading); 
      } 
     } 

     #endregion 
    } 

에 IsLoading라는 속성이 있습니다. 당신은 내가 IsLoading = 사실 잘 살고있다 위의 코드에서 볼 수 있듯이

public class MainViewModel : BaseViewModel 
{ 
    public DashBoardViewModel DashboardVM 
    { 
     get { return _DashBoardVM; } 
     set 
     { 
      _DashBoardVM = value; 
      RaisePropertyChanged(() => DashboardVM); 
     } 
    } 

    public AccountViewModel AccountVM 
    { 
     get { return _AccountVM; } 
     set 
     { 
      _AccountVM = value; 
      RaisePropertyChanged(() => AccountVM); 
     } 
    } 
    public MainViewModel() 
    { 
     //To Do 
    } 

    public async Task Init() 
    { 
     DashboardVM = new DashBoardViewModel();    
     AccountVM = new AccountViewModel(); 
     await Task.Delay(0); 
    } 
} 

다음은 내 DashBoardViewModel

public class DashBoardViewModel : BaseViewModel 
{ 
    public DashBoardViewModel() 
    { 
     IsLoading = true; 
     //Code to get data 
    } 
} 

이지만, 클라이언트 측에서 우리는이 등록하여 PropertyChanged 이벤트를하지 않습니다.

다음은 진행 코드를 보여주는 클라이언트 코드 중 하나입니다.

우리는 조각을 사용하는 안드로이드에

은 아래에있는 내 DashBoardFragment 클래스 내 MAINVIEW 활동 아래

public class MainView : MvxFragmentActivity 
{ 
    private ViewPager _viewPager; 
    private TabPageIndicator _pageIndicator; 
    private MvxViewPagerFragmentAdapter _adapter; 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.MainView); 

     var fragments = new List<MvxViewPagerFragmentAdapter.FragmentInfo> 
      { 
      new MvxViewPagerFragmentAdapter.FragmentInfo 
      { 
       FragmentType = typeof(DashboardFragment), 
       Title = "", 
       ViewModel = ViewModel.DashboardVM 
      }, 

      new MvxViewPagerFragmentAdapter.FragmentInfo 
      { 
       FragmentType = typeof(MyProfileFragment), 
       Title = "", 
       ViewModel = ViewModel.AccountVM 
      } 
      }; 
     _viewPager = FindViewById<ViewPager>(Resource.Id.viewPager); 
     _adapter = new MvxViewPagerFragmentAdapter(this, SupportFragmentManager, fragments); 
     _viewPager.Adapter = _adapter; 

     _pageIndicator = FindViewById<TabPageIndicator>(Resource.Id.viewPagerIndicator); 

     _pageIndicator.SetViewPager(_viewPager); 
     _pageIndicator.CurrentItem = 0; 
    }    
} 

입니다

public class DashboardFragment : MvxFragment 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, 
             Bundle savedInstanceState) 
    { 
     var ignore = base.OnCreateView(inflater, container, savedInstanceState); 
     var viewToReturn = this.BindingInflate(Resource.Layout.Dashboard, null); 

        #region MVVMCROSS Binding 

     var set = this.CreateBindingSet<DashboardFragment, DashBoardViewModel>(); 

     #endregion 

     #region Handle Progress bar 

     //initializing bindableprogress 
     var _bindableProgress = new BindableProgress(Activity); 
     //Binding with viewmodel property 
     set.Bind(_bindableProgress).For(m => m.IsLoading).To(vm => vm.IsLoading); 

     #endregion 

     #region Bind the set 

     set.Apply(); 

     #endregion 

     return viewToReturn; 
    } 
} 

참고 : BindableProgress로드가 있었다되는 속성을 가지고있는 클래스이다 표시되고 간단한 ViewModel에서 제대로 작동합니다.

제발 도와주세요.

감사 Aaman

나는 이것이 올바른 생각하지 않는다

답변

0

: 당신이 아직 표시되지 않는, 뷰 모델을 만드는 것처럼 당신은 아마 생성자에서 이런 일을하지 않으려는

public class DashBoardViewModel : BaseViewModel 
{ 
public DashBoardViewModel() 
{ 
    IsLoading = true; 
    //Code to get data 
} 
} 

. 그래서 IsLoading을 true로 설정했으나 활성 화면이 아니기 때문에 표시기가 표시되지 않습니다.

이 기능이 작동합니까?

public async Task Init() 
{ 
    IsLoading = true; 
    DashboardVM = new DashBoardViewModel();    
    AccountVM = new AccountViewModel(); 
    await Task.Delay(0); 
    IsLoading = false; 
} 

여기에는 아이 뷰 모델을 초기화하는 동안 MainView 모델의로드 표시기가 표시되어야합니다.

관련 문제