Aga*_*gat 2 xamarin.ios xamarin.android mvvmcross xamarin.forms
我有一个登录视图模型(带有相应的页面)。在这种特殊情况下,我使用 Xamarin.Forms。
我需要的是登录视图作为导航堆栈的通用视图呈现为可以用 [MvxModalPresentationAttribute] 注释的视图。
我在两种情况下展示这个视图:
我想,Custom Presenter 是实现这一目标的方法,如下所示(以 iOS 为例):
public class GeneralPresenter : MvxIosViewPresenter
{
public override void Show(MvxViewModelRequest request)
{
// ...
base.Show(request);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不太明白接下来应该采取的步骤。(特别是,如果有任何关于 Xamarin.Forms 的具体信息也应该完成)。
有什么提示吗?
在Mvvmcross.core 5.7.0上,如果你想在iOS上呈现模态样式的视图,可以MvxModalPresentation为视图添加一个属性:
[MvxModalPresentation(
// Add this to modify the present view's style
//ModalPresentationStyle = UIModalPresentationStyle.PageSheet,
//ModalTransitionStyle = UIModalTransitionStyle.CoverVertical
)]
public class SecondView : MvxViewController
{
...
}
Run Code Online (Sandbox Code Playgroud)
那么这个view的呈现方式和push一样:
private readonly Lazy<IMvxNavigationService> _navigationService = new Lazy<IMvxNavigationService>(Mvx.Resolve<IMvxNavigationService>);
async private void ExecuteCommand()
{
await _navigationService.Value.Navigate<SecondViewModel>();
}
Run Code Online (Sandbox Code Playgroud)
最后驳回这个观点应该是这样的:
async private void ExecuteCommand()
{
await _navigationService.Value.Close(this);
}
Run Code Online (Sandbox Code Playgroud)
将Mvvmcross更新到6.0.1.0后,我们可以使用该IMvxOverridePresentationAttribute接口来定义视图的呈现样式。使视图实现该接口:
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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
IsModalView在我的 ViewModel 中定义。当我们想要呈现一个视图时,用它来修改样式:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |