gpt4 book ai didi

xamarin.forms - MvvmCross如何实现 View 模型的条件呈现?

转载 作者:行者123 更新时间:2023-12-02 20:23:17 25 4
gpt4 key购买 nike

我有一个登录 View 模型(带有相应的页面)。在这种特殊情况下,我使用 Xamarin.Forms。

我需要的是登录 View 作为导航堆栈的通用 View 呈现为可以用 [MvxModalPresentationAttribute] 注释的 View 。

我在两种情况下显示此 View :

  • 应用启动且用户未登录(以及无需登录即可进行进一步工作)时显示的第一个 View ;
  • 在应用工作期间(如果用户未登录),但用户请求了某些功能,这需要先登录。

我猜,Custom Presenter 是实现这一目标的方法,如下所示(以 iOS 为例):

public class GeneralPresenter : MvxIosViewPresenter
{
public override void Show(MvxViewModelRequest request)
{
// ...

base.Show(request);
}
}

但是,我不太明白接下来应该采取的步骤。 (特别是,如果有任何关于 Xamarin.Forms 的具体信息,也应该完成)。

有什么提示吗?

最佳答案

在Mvvmcross.core 5.7.0上,如果你想在iOS上呈现模态样式的 View ,可以向 View 添加MvxModalPresentation属性:

[MvxModalPresentation(
// Add this to modify the present view's style
//ModalPresentationStyle = UIModalPresentationStyle.PageSheet,
//ModalTransitionStyle = UIModalTransitionStyle.CoverVertical
)]
public class SecondView : MvxViewController
{
...
}

那么呈现这个view的方式和push一样:

private readonly Lazy<IMvxNavigationService> _navigationService = new Lazy<IMvxNavigationService>(Mvx.Resolve<IMvxNavigationService>);
async private void ExecuteCommand()
{
await _navigationService.Value.Navigate<SecondViewModel>();
}

最后忽略这个 View 应该是这样的:

async private void ExecuteCommand()
{
await _navigationService.Value.Close(this);
}

更新:

将Mvvmcross更新到6.0.1.0后,我们可以使用IMvxOverridePresentationAttribute接口(interface)来定义 View 的呈现样式。让 View 实现接口(interface):

public class SecondView : MvxViewController<SecondViewModel>, IMvxOverridePresentationAttribute
{
...
public MvxBasePresentationAttribute PresentationAttribute(MvxViewModelRequest request)
{
var instanceRequest = request as MvxViewModelInstanceRequest;
SecondViewModel viewModel = instanceRequest?.ViewModelInstance as SecondViewModel;

if (viewModel.IsModalView)
{
return new MvxModalPresentationAttribute();
}
return new MvxChildPresentationAttribute();
}
...
}

IsModalView 在我的 ViewModel 中定义。当我们想要呈现一个 View 时,用它来修改样式:

public class SecondViewModel : MvxViewModel<bool>
{
...
public override void Prepare(bool parameter)
{
IsModalView = parameter;
}
public bool IsModalView { set; get; }
...
}
// The navigate method
await _navigationService.Value.Navigate<SecondViewModel, bool>(false);

关于xamarin.forms - MvvmCross如何实现 View 模型的条件呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720391/

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