我正在为我的地铁应用程序使用MVVM模式。在我的主页面上,用户按下按钮,应用程序获取用户的当前位置。
获取用户位置的过程是异步的,我希望UI更改,因此该按钮将被禁用,并且将显示一个不确定的进度条,直到返回坐标为止。
根据MVVM管理这个的最佳方法是什么?拥有自定义视觉状态?我注意到有ApplicationViewStates和CommonStates,是否可以添加自己的自定义项? 你会怎么做?
答案 0 :(得分:1)
我认为你正在寻找类似的东西:
视图模型:
private async void CommandExecution()
{
IsAwaitingResponse=true;
var response = await _myService.DoNetworkCall()
IsAwaitingResponse=false;
}
如果您正在使用其中一个微软模板,那么您应该在“Common”文件夹中放置一个BooleanToVisibilityConverter。你这样使用它:
<Page.Resources>
<BooleanToVisibilityConverter x:key="booleanToVisibilityConverter"/>
</Page.Resources>
"..."
<ProgressBar Visibility={Binding IsAwaitingResponse,Converter={StaticResource booleanToVisibilityConverter}}" IsIndeterminate="true"/>
答案 1 :(得分:0)
我的xaml体验是使用WPF和Silverlight,但我希望这个建议适用于Metro应用程序。您可以将按钮的IsEnabled属性和进度条的visibility属性绑定到视图模型上的布尔属性(可能称之为IsCurrentLocationComplete)。当异步方法完成并且您的视图将被更新时,您将更改此属性的值。设置Button的属性是直截了当的,但是你需要一个值转换器(IValueConverter)来显示进度条的可见性。