【发布时间】:2013-10-26 21:38:29
【问题描述】:
我正在开发一个 WP8 应用程序 (C#/XAML)。
在我看来,我指定了一个按钮,该按钮是通过绑定回调来设置的,用于在 VM 未完全加载时启动应用程序。
MVVM 看起来像:
ViewModel
---------
+ Model
-----
+Property
并在App.xaml.cs 中创建,如下所示:
public static MainViewModel ViewModel
{
get
{
if (viewModel == null)
{
viewModel = new MainViewModel();
}
return viewModel;
}
}
并将页面设置为页面构造器中的数据上下文:
DataContext = App.ViewModel;
还有按钮:
<Button x:Name="btn" Content="{Binding Model.Property, FallBackValue='click to load'}" .../>
一开始,
btn没有值可放入其内容中,因为模型为空。单击
btn时,它会加载模型。它用数据填充模型并导航到显示该数据的另一个页面。当我向后导航(通过硬件后退按钮)时,我希望
btn使用绑定中的值而不是后备,因为该值已设置。但是它没有使用它,仍然使用绑定的 FallbackValue 参数提供的那个。
如何确保页面“刷新”并使用 ViewModel 提供的实际值?
【问题讨论】:
-
您能否为这部分问题添加更多深度,因为我不明白您的意思。引用:“它跳回到第一页并且按钮的内容仍然是点击加载而不是Model.Property的值......”
-
对其进行了编辑。希望它现在更具可读性。我通宵达旦,我的社交技能几乎已经枯竭,所以有时很难理解我。
-
您可能必须使用 OnNavigatedFrom 函数将填充的对象发送回您的主页。
-
嗯,包含模型的 ViewModel 是静态的,并通过 DataContext 属性绑定到页面。
-
但是您确定吗,当您通过导航回到主页离开页面时,这些项目仍然“活跃”,并且垃圾收集器不会处理视图模型/模型,即使它们是静态的,你可以检查一下
标签: c# xaml data-binding mvvm windows-phone-8