【问题标题】:Xamarin Portable OnAppearing() XAML page loadingXamarin Portable OnAppearing() XAML 页面加载
【发布时间】:2017-11-01 15:32:33
【问题描述】:

我正在使用 Xamarin Forms Portable 项目并且我正在使用 MVVM 方法。现在我被困住了。我想建立一个加载页面。因此,当(自定义)页面启动时,它必须加载 XAML 页面加载,并且当加载(对 Web 服务的调用)完成时,XAML 页面加载必须设置为可见 = false。

我有下一个不起作用的代码:

    protected override async void OnAppearing()
    {

        base.OnAppearing();

        var page = Navigation.PushAsync(new ActivityIndicatorPage());

        await Task.Delay(1000);

        BindingContext = new ProductViewModel(_ProductId);

    }

那么我如何调用“ActivityIndi​​catorPage”页面,然后在“BindingContext = new ProductViewModel(_ProductId);”之后将其设置为不可见通话完成。

谢谢。

【问题讨论】:

    标签: c# xaml xamarin mvvm


    【解决方案1】:

    您需要AcitvityIndicator 只需将此代码包含在要显示加载的 xaml 页面中 并绑定StackLayoutIsVisible 属性或您选择的任何容器。

    <StackLayout HorizontalOptions="Center" VerticalOptions="Center" IsVisible="{Binding IsLoading}">
        <ActivityIndicator Color="Red" IsRunning="true" />
    </StackLayout>
    

    然后您可以根据您的后台任务完成情况将其可绑定属性(或 StackLayout 的名称)设置为 true 或 false 例如:在你的代码后面或viewModel 你可以做这样的事情

    public async Task<bool> MyBackgroundTask(){
        IsLoading=true
        //your background task
        if(successful){
            IsLoading = false
        }
    }
    

    【讨论】:

    • 触发我的模型 (ProductViewModel) 后,我有了“LoadData”类。 // public async Task LoadData() { IsLoading = true;任务 _product = GetProductOnlineWebservice(_productId); var _Prod = 等待 _product; NotifyAllPropertiesChanged(); IsLoading = false;} 不工作:(
    • 首先通过设置&lt;StackLayout IsVisible="true"/&gt; 或删除StackLayout 来确保ActivityIndicator 视图正确放置并在页面中可见。之后,您可以为StackLayout 指定一个名称,并在后面的代码中更改其IsVisible property。在此行为生效后,您可以将其与您的 ViewModel 属性绑定。
    • 您好@Fahadsk,感谢您的帮助,但我是 Xamarin Rooki。请问有例子吗?
    • 它只是不起作用。快疯了 :( ... protected override async void OnAppearing() { base.OnAppearing(); var page = Navigation.PushAsync(new ActivityIndi​​catorPage()); await Task.Delay(1000); BindingContext = new ProductViewModel(_ProductId); }code ProductViewModel 是获取 Webservice 数据的模型。但是 AcitivityIndi​​cator 不会触发。
    • 私人名单 _productSearchList;公共 ProductSearchViewModel(string _Name) : base(listenCultureChanges: true) { _SearchName = _Name;缩略图高度 = 100; Windows_On_Load(); } 异步无效 Windows_On_Load() { IsLoading = true;等待任务。延迟(1000); //模拟 1 秒等待 LoadData(); IsLoading = 假;它只适用于Task.Delay。还有其他方法吗?
    猜你喜欢
    • 2021-03-09
    • 2018-04-03
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多