【问题标题】:Trouble binding to a textblock - Windows Phone - MVVM无法绑定到文本块 - Windows Phone - MVVM
【发布时间】:2014-03-05 17:53:39
【问题描述】:

我花了几个小时试图找出这个 ONE 问题。以下是正在发生的事情:

我正在尝试将标题从我的 ViewModel 绑定到我的 XAML 文件。所有代码都执行(我使用断点/监视检查),但绑定实际上不起作用。我对开发非常陌生,尤其是 MVVM,所以我很难弄清楚这一点。相关代码:

App.Xaml.Cs

        private static MainPageViewModel _mainPageViewModel = null;

    public static MainPageViewModel MainPageViewModel
    {
        get
        {
            if (_mainPageViewModel == null)
            {
                _mainPageViewModel = new MainPageViewModel();
            }
            return _mainPageViewModel;
        }
    }

主页面模型

        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 文件中设置数据上下文。

我很确定我已经为此发布了所有相关代码。谢谢大家!!

【问题讨论】:

    标签: c# xaml mvvm windows-phone-8 windows-phone


    【解决方案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}">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多