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]
没有结合它完美的作品,但我需要动态地改变它,任何想法/解决方法吗?谢谢。
我发现这个问题,而不是绑定我用X:绑定,但不应该有除了性能上的差异,还需要了解为什么..
文本=“{X:绑定视图模型.Title}“>
因为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。对不起,如果这有点晚,但希望它有帮助。
检查* DataContext *并记住'x:Bind'是* OneTime *作为默认值。 – Romasz