Navigation Back和MVVM-如何刷新WP8页面数据绑定 - c#

我正在做WP8应用程序(C#/ XAML)。

在我看来,我指定了一个按钮,该按钮是通过与回调绑定来设置的,用于在虚拟机未完全加载时启动应用程序。

MVVM看起来像:

ViewModel
---------
 + Model
   -----
    +Property

并在App.xaml.cs中创建,如下所示:

public static MainViewModel ViewModel
    {
        get
        {
            if (viewModel == null)
            {
                viewModel = new MainViewModel();
            }
            return viewModel;
        }
    }

并将页面设置为页面的conconctor中的datacontext:

DataContext = App.ViewModel;

和按钮:

<Button x:Name="btn" Content="{Binding Model.Property, FallBackValue='click to load'}" .../>

首先,由于模型为空,btn没有要放入其值的值。
单击btn时,它将加载模型。它用数据填充模型,并导航到另一个显示该数据的页面。
当我向后导航(通过硬件后退按钮)时,我希望btn使用绑定中的值而不是后备值,因为该值已设置。但是它不使用它,仍然使用FallbackValue参数提供的绑定值。

如何确保页面“刷新”一个使用ViewModel提供的实际值?

参考方案

好的,我自己找到了解决问题的办法。

问题

如果您使用的是静态Datacontext(如果您使用的Viewmodel类是作为静态创建的),那么当您导航回到页面时,数据绑定将不会更新(至少在我的情况下是如此)。

我对多个页面使用相同的datacontext(ViewModel包含多个模型,并且在某些集合和属性内)。但是,当我通过硬件后退按钮导航回该页面时,数据绑定未更新。

即使您将按钮/文本块的内容更改为新值,它的内容仍停留在旧值。

重写OnNavigatedTo方法,然后在构造器中设置数据绑定。这样,您可以确定数据绑定始终是“新的”并已更新。

在代码隐藏的page类内(.xaml.cs文件粘贴到.xaml页面上),编写以下代码:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   base.OnNavigatedTo(e);        //can be left out, base method is empty
   DataContext = null;           //setting datacontext empty at first
   DataContext = App.ViewModel;  //and setting it to the static ViewModel i created
}

这样,当我进入页面时,总是先将DataContext设置为null(这样旧值将被清除,并且没有任何可绑定的对象)。

在那之后不久,我将原始的DataContext放回原处,因此它又需要重新绑定。

null的步骤是必需的,因为我需要更改datacontext属性,否则,如果我再次指向已经设置为dataContext的同一对象,则不会发生任何事情。

Windows Phone WNS通知导航到特定页面 - c#

它是Windows运行时,Windows Phone专用项目。我正在使用Azure和Azure通知中心。所以我的问题是,有谁愿意如何导航到某些特定页面并发送ID等参数。这是我的吐司模板,如字符串中所述: var toast = @"<toast><visual><binding template=""…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4