2014-03-05 49 views
1

我花了幾個小時試圖找出這個問題。這裏是正在發生的事情:無法綁定到文本塊 - Windows Phone - MVVM

我想從我的ViewModel綁定一個標題,以我的XAML文件。所有的代碼執行(我使用斷點/手錶進行檢查),但綁定實際上並不工作。我對開發非常陌生,特別是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}"> 

我需要一個using語句在XAML嗎?我以爲我只需要在MainPage.Xaml.Cs文件中設置數據上下文。

我敢肯定,我已經發布的所有相關的代碼這一點。感謝大家!!

回答

1

的問題是在這裏,在視圖模型類:

private void LoadAll() 
{ 
    var page = new MainPageModel(); 
    page.PageTitle = "title"; 

所有你所做的是創建一個本地對象「頁面」 - 這將無法訪問外的局部範圍內的任何地方。我想你的意思做的是使「頁面」,「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}">