我正在努力在Xamarin Android的MVVMCross结构中使用ProgressBar。最初,我想将ProgressBar的可见性绑定到ViewModel中的字段。事实证明这很困难,我尝试了几种排列并从此处尝试了一些建议:How to set visibility for ProgressBar in android MvvmCross Xamarin
我确实还有其他元素,例如按钮,我已经能够成功绑定项目中的其他位置,因此我不确定为什么这是一个大问题。经过多次尝试,我决定尝试在ViewModel中实用地设置Visibility。我已经尝试了几种方法,但是我最终认为可以肯定的工作没有实现。
Xaml:
<ProgressBar
android:id="@+id/progressBarMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"
style="@android:style/Widget.ProgressBar.Large" />
我尝试了默认可见性,也没有默认可见性。我已经尝试使用几种常规的绑定方法来尝试local:MvxBind,然后使用自定义转换器或Visibility插件。
很遗憾,在我的Fragment中,我在ViewModel中设置了FragmentActivity属性,以查看是否可以使它以某种形式工作(OnCreateView):
ViewModel.FragActivity = this.Activity;
ViewModel.Progress = view.FindViewById<Android.Widget.ProgressBar>(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);
}
我在做什么错?我已经尝试了许多排列方式,在Google上进行了任何操作,并查阅了有限的Xamarin文档。非常感谢任何帮助或指示。
谢谢。
答案 0 :(得分:0)
原来的问题是链接器删除了Visibility属性。我从这篇文章中得到了这个主意:Visibility binding fails
我在LinkerPleaseInclude中添加了以下代码:
public static void Include(ProgressBar progressBar)
{
progressBar.Click += (s, e) => progressBar.Visibility = progressBar.Visibility - 1;
}
如果有人好奇我是怎么做到的,下面是代码:
Xaml:
<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" />
ViewModel:
private bool _showProgress;
public bool ShowProgress
{
get => _showProgress;
set => SetProperty(ref _showProgress, value);
}
SetProperty来自MvxNotifyPropertyChanged类。