我花了几个小时试图找出这个问题。这是正在发生的事情:
我正在尝试将标题绑定到我的ViewModel中的XAML文件。所有代码都执行(我使用breakpoints / watch检查),但绑定实际上并不起作用。我对开发非常陌生,尤其是MVVM,所以我很难搞清楚这一点。相关代码:
App.Xaml.Cs
private static MainPageViewModel _mainPageViewModel = null;
public static MainPageViewModel MainPageViewModel
{
get
{
if (_mainPageViewModel == null)
{
_mainPageViewModel = new MainPageViewModel();
}
return _mainPageViewModel;
}
}
MainPageModel
public class MainPageModel : BaseModel
{
private string _pageTitle;
public string PageTitle
{
get { return _pageTitle; }
set
{
if (_pageTitle != value)
{
NotifyPropertyChanging();
_pageTitle = value;
NotifyPropertyChanged();
}
}
}
MainPageViewModel
private void LoadAll()
{
var page = new MainPageModel();
page.PageTitle = "title";
MainPageViewModel
public MainPageViewModel()
{
LoadAll();
}
MainPage.xaml.cs中
public MainPage()
{
InitializeComponent();
DataContext = App.MainPageViewModel;
}
MainPage.xaml中
<Grid x:Name="LayoutRoot">
<phone:Panorama Title="{Binding PageTitle}">
我是否也需要在Xaml中使用using语句?我以为我只需要在MainPage.Xaml.Cs文件中设置数据上下文。
我很确定我已经发布了所有相关代码。谢谢大家!!
答案 0 :(得分:1)
问题出在这里,在视图模型类中:
private void LoadAll()
{
var page = new MainPageModel();
page.PageTitle = "title";
您在此处所做的只是创建一个本地对象“页面” - 在本地范围之外的任何地方都无法访问。我想你的意思是让“page”成为“MainPageViewModel”的成员:
public class MainPageViewModel
{
public MainPageModel Model { get; private set; }
private void LoadAll()
{
_page = new MainPageModel();
_page.PageTitle = "title";
}
}
这样,您就可以绑定到“PageTitle”属性了 - 但请记住,它是一个嵌套属性,因此您需要:
<phone:Panorama Title="{Binding Model.PageTitle}">