C# Xamarin安卓进度条

C# Xamarin安卓进度条,c#,android,xamarin,mvvmcross,C#,Android,Xamarin,Mvvmcross,我很难在Xamarin Android的MVVMCross结构中使用ProgressBar。最初,我希望将ProgressBar的可见性绑定到ViewModel中的字段。事实证明这很困难,我尝试了几种排列方式,并尝试了以下建议: 我确实有其他元素,比如按钮,我已经能够成功地将其他元素绑定到我的项目中的任何地方,所以我不知道为什么这是一个如此大的问题。经过多次尝试后,我决定尝试在ViewModel中实用地设置可见性。我试过几种方法,但我最后认为肯定行得通的方法行不通 Xaml: 我尝试过使用和

我很难在Xamarin Android的MVVMCross结构中使用ProgressBar。最初,我希望将ProgressBar的可见性绑定到ViewModel中的字段。事实证明这很困难,我尝试了几种排列方式,并尝试了以下建议:

我确实有其他元素,比如按钮,我已经能够成功地将其他元素绑定到我的项目中的任何地方,所以我不知道为什么这是一个如此大的问题。经过多次尝试后,我决定尝试在ViewModel中实用地设置可见性。我试过几种方法,但我最后认为肯定行得通的方法行不通

Xaml:


我尝试过使用和不使用默认可见性。我尝试了local:MvxBind和几种常规的绑定方法,然后使用自定义转换器或Visibility插件

在我的片段中,我很遗憾地在我的ViewModel中设置了FragmentActivity属性,只是想看看我是否可以以某种形式(OnCreateView)实现它:

ViewModel.FragActivity=this.Activity;
ViewModel.Progress=view.findviewbyd(Resource.Id.progressBarMap);
请注意,我也尝试将ProgressBar设置为名为Progress的字段,并在ViewModel中使用它

下面是我在ViewModel中操作ProgressBar的位置:

private void AddOfflinePoints()
{
    try
    {
        FragActivity.RunOnUiThread(() => 
        {
            //I've also tried using the above Progress property. That wasn't null but did not update.
            ProgressBar barOfProgression = FragActivity.FindViewById<ProgressBar>(Resource.Id.progressBarMap);
            //barOfProgression is null :(
            barOfProgression.Visibility = ViewStates.Visible;
            barOfProgression.Enabled = true;
        });

        //Code to run while spinning the progress bar (It is inside Task.Run)
    }
    catch (Exception)
    {
        //Exception Handling code...
    }

    FragActivity.RunOnUiThread(() => Progress.Visibility = ViewStates.Gone);
}
private bool _showProgress;
public bool ShowProgress
{
    get => _showProgress;
    set => SetProperty(ref _showProgress, value);
}
private void AddOfflinePoints()
{
尝试
{
FragActivity.RunOnUiThread(()=>
{
//我也尝试过使用上面的Progress属性。该属性不是null,但没有更新。
ProgressBar barOfProgression=fragaActivity.FindViewById(Resource.Id.progressBarMap);
//BAROFPROGRESS为空:(
barOfProgression.Visibility=视图状态.Visible;
BAROFPROGROSION.Enabled=真;
});
//旋转进度条时要运行的代码(位于Task.run内)
}
捕获(例外)
{
//异常处理代码。。。
}
FragActivity.RunOnUiThread(()=>Progress.Visibility=ViewStates.Gone);
}
我做错了什么?我在谷歌上尝试了许多排列,任何东西,并查阅了有限的Xamarin文档。非常感谢任何帮助或指点


谢谢。

原来问题是链接器删除了可见性属性。我从这篇文章中得到了这个想法:

我在LinkerPleaseInclude中添加了以下代码:

public static void Include(ProgressBar progressBar)
{
    progressBar.Click += (s, e) => progressBar.Visibility = progressBar.Visibility - 1;
}
如果有人好奇我是如何做到的,下面是代码:

Xaml:


其中SetProperty来自MvxNotifyPropertyChanged类。

您应该能够只绑定可见性。但请记住为此添加可见性插件。
public static void Include(ProgressBar progressBar)
{
    progressBar.Click += (s, e) => progressBar.Visibility = progressBar.Visibility - 1;
}
<ProgressBar
    android:id="@+id/progressBarMap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    local:MvxBind="Visibility Visibility(ShowProgress)"
    style="@android:style/Widget.ProgressBar.Large" />
private bool _showProgress;
public bool ShowProgress
{
    get => _showProgress;
    set => SetProperty(ref _showProgress, value);
}