c# - 无法绑定(bind)到文本 block - Windows Phone - MVVM

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

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

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

应用程序.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;
    }

主页.Xaml
<Grid x:Name="LayoutRoot">
    <phone:Panorama Title="{Binding PageTitle}">

我是否也需要在 Xaml 中使用 using 语句?我以为我只需要在 MainPage.Xaml.Cs 文件中设置数据上下文。

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

最佳答案

问题出在 View 模型类中:

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";
    }
}

这样,您就可以绑定(bind)到“PageTitle”属性——但请记住,它是一个嵌套属性,因此您需要:
<phone:Panorama Title="{Binding Model.PageTitle}">

关于c# - 无法绑定(bind)到文本 block - Windows Phone - MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205376/

相关文章:

c# - ResourceManager 和不受支持的平台

xaml - ReSharper:此处不允许使用 'Name' 属性;在 XAML 中使用 'x:Name' 代替

c# - 带有 Dispatcher 的 BackgroundWorker 似乎没有做任何事情

mvvm - Prism正确处理ViewModel集合

wpf - MVVM:如果后台线程不断更改模型怎么办?

c# - 如何从c#调用一个dll文件

c# - 无法打开源 'blah' 的日志。您可能没有写入权限。嗯?

c# - Linq groupBy IGrouping 以简单/干净的方式列出 <>

javascript - Datagrid 相当于 HTML 表单占位符属性

c# - 如何在 Windows 8 c# 中将图像 url 保存到本地文件