处理MVVM中的不同视图模型状态

时间:2012-09-07 16:56:54

标签: c# xaml windows-8 microsoft-metro winrt-xaml

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

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

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

2 个答案:

答案 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)来显示进度条的可见性。