2

我正在为我的 Metro 应用程序使用 MVVM 模式。在我的主页上,用户按下按钮,应用程序获取用户的当前位置。

获取用户位置的过程是异步的,我希望 UI 发生变化,因此按钮将被禁用,并且会显示一个不确定的进度条,直到返回坐标。

根据 MVVM 管理此问题的最佳方法是什么?有自定义的视觉状态?我注意到有 ApplicationViewStates 和 CommonStates,是否可以添加自己的自定义?你会怎么做?

4

2 回答 2

1

我认为您正在寻找类似的东西:

视图模型:

private async void CommandExecution()
{
    IsAwaitingResponse=true;
    var response = await _myService.DoNetworkCall()
    IsAwaitingResponse=false;
}

如果您使用的是 Microsoft 模板之一,您的“Common”文件夹中应该有一个 BooleanToVisibilityConverter。你像这样使用它:

<Page.Resources>
    <BooleanToVisibilityConverter x:key="booleanToVisibilityConverter"/>
</Page.Resources>
"..."
<ProgressBar Visibility={Binding IsAwaitingResponse,Converter={StaticResource booleanToVisibilityConverter}}" IsIndeterminate="true"/>
于 2012-09-13T15:22:56.217 回答
0

我的 xaml 经验是使用 WPF 和 Silverlight,但我希望这个建议适用于 Metro 应用程序。您可以将按钮的 IsEnabled 属性和进度条的可见性属性绑定到视图模型上的布尔属性(可能称为 IsCurrentLocationComplete)。当异步方法完成并且您的视图将被更新时,您将更改此属性的值。设置 Button 的属性很简单,但是您需要一个值转换器 (IValueConverter) 来实现进度条的可见性。

于 2012-09-07T18:01:42.500 回答