gpt4 book ai didi

android - Mvvmcross 加载指示器未显示

转载 作者:行者123 更新时间:2023-11-29 12:32:49 24 4
gpt4 key购买 nike

我正在使用 mvvmcross 开发跨平台应用程序,它以最显着的方式帮助了我们。

我在加载指示器显示方面遇到了一个小问题。

我的 BaseViewModel 中有一个名为 IsLoading 的属性

    public abstract class BaseViewModel : MvxViewModel
{
#region IsLoading

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

#endregion
}

现在,我有 MainViewModel,它在其中创建两个 View 模型的实例,如下所示。

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
}
}

正如您在上面的代码中看到的,我已经设置了 IsLoading = true,但是在客户端我们没有得到该属性的 propertychanged 事件。

下面是我显示进度对话框的客户端代码之一。

在 Android 上我们使用 fragment ,下面是我的 MainView Activity

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;
}
}

下面是我的 DashBoardFragment 类

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 上工作正常。

请帮我解决这个问题。

谢谢阿曼

最佳答案

我不认为这是正确的:

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

在创建 View 模型时,您可能不希望在构造函数中发生这种情况,但还没有显示它们。这就是为什么您看不到指示器的原因,因为您将 IsLoading 设置为 true 但那不是 Activity 屏幕。

这样的东西有用吗?

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

这里的想法是,您应该在 subview 模型的初始化期间显示 MainView 模型的加载指示器。

关于android - Mvvmcross 加载指示器未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27186995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com