Template10 PageHeader文本绑定异常

问题描述:

我为我的UWP应用程序使用Template10,并且我想动态更新页面标题文本。这是我的XAML,Template10 PageHeader文本绑定异常

 <controls:PageHeader x:Name="pageHeader" Text="{Binding ViewModel.Title}"> 
      <!--place stretched, across top--> 
      <RelativePanel.AlignTopWithPanel>True</RelativePanel.AlignTopWithPanel> 
      <RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel> 
      <RelativePanel.AlignLeftWithPanel>True</RelativePanel.AlignLeftWithPanel> 
     </controls:PageHeader> 

这里是异常消息,

WinRT information: Failed to assign to property 'Template10.Controls.PageHeader.Text'. [Line: 57 Position: 73] 

Additional information: The text associated with this error code could not be found. 

Failed to assign to property 'Template10.Controls.PageHeader.Text'. [Line: 57 Position: 73] 

没有结合它完美的作品,但我需要动态地改变它,任何想法/解决方法吗?谢谢。

+0

检查* DataContext *并记住'x:Bind'是* OneTime *作为默认值。 – Romasz

我发现这个问题,而不是绑定我用X:绑定,但不应该有除了性能上的差异,还需要了解为什么..

文本=“{X:绑定视图模型.Title}“>

+0

因为x:Bind的默认“Mode”是“OneTime”,而不是像Binding那样的“OneWay”。 –

如果你还没有解决这个问题(已经有一段时间了),这里是你应该做的。

首先,确保ViewModel是在XAML页面或代码隐藏页面中定义的。

<Page.DataContext> 
    <vm:ViewModelPage x:Name="ViewModel" /> 
</Page.DataContext> 

VM是是命名空间您的视图模型(例如,MyAppProject.ViewModels)在命名空间声明在顶部像定义如下:

xmlns:vm="using:MyAppProject.ViewModels" 

ViewModelPage是包含标题属性的ViewModel页面的类型。

同样可以在代码隐藏视图页面如下定义(但更喜欢XAML作为其更具有可读性结合你在里面绑定)

public ViewModelPage ViewModel => this.DataContext as ViewModelPage ; 

你需要使用命名空间来放在代码隐藏的顶部声明ViewModel(实际上你在XAML页面中为vm所做的)。

随着视图模型定义做的权利,你不应该得到“......找不到”错误。

现在进行绑定:使用x:绑定,因为它比传统绑定有所改进。看到我的回答here explaining the advantages of x:Bind。一个重要的事情要记住被设置绑定模式为“单向”(或“双向”如果这是适用于某些情况下,如更新一个TextBox)它,而不是留到默认的“一次性”如果模式定义不见了。

最后但并非最不重要,请确保标题属性引发PropertyChanged事件以更新绑定(如果您动态更改标题)。该视图模型页面应充分作好准备,以促进这个:如果按照模板10模式,视图模型页面从ViewModelBase派生和属性可以访问RaisePropertyChanged方法调用,所以你的Title属性应该是这样的:

private string _title; 
public string Title 
{ 
    get { return _title; } 
    set { _title = value; RaisePropertyChanged(nameof(Title)); } 
} 

可以用于一种不同的方法名RaisePropertyChanged,如设置的SetProperty。对不起,如果这有点晚,但希望它有帮助。