0

Ich benutze Template10 für meine UWP-Anwendung und ich möchte Seite Kopftext dynamisch aktualisieren. Hier ist meine XAML,Template10 PageHeader Text Binding Exception

 <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> 

Hier ist die Ausnahmemeldung,

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] 

Ohne Bindung es funktioniert perfekt, aber ich brauche, um zu dynamisch zu verändern, eine Idee/Abhilfe? Vielen Dank.

+0

Überprüfen Sie * DataContext * und denken Sie daran, dass 'x: Bind 'standardmäßig * OneTime * ist. – Romasz

Antwort

0

Ich habe das Problem gefunden, anstelle der Bindung habe ich verwendet, x: Bind, aber es sollte nicht außer Unterschied Leistung sein, müssen immer noch verstehen, warum ..

Text = "{x: Bind Ansichtsmodell .Titel} ">

+0

Da der Standardmodus von x: Bind "OneTime" ist, anstelle von "OneWay" wie Binding. –

0

Wenn Sie dieses Problem nicht schon gelöst haben (war schon eine Weile), sollten Sie Folgendes tun.

Stellen Sie zuerst sicher, dass das ViewModel entweder in der XAML-Seite oder der CodeBehind-Seite definiert ist.

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

vm ist die Namespace für Ihr Viewmodel (zB MyAppProject.ViewModels) definiert wie unten in den Namespace-Deklarationen in der Spitze:

xmlns:vm="using:MyAppProject.ViewModels" 

während ViewModelPage das ist der Typ der ViewModel-Seite, die die Title Eigenschaft enthält.

Das gleiche gilt im Hinblick Seite Code-behind, wie unten (aber lieber XAML als besser lesbar in Verbindung mit Ihnen Bindungen da drin ist) definiert werden

public ViewModelPage ViewModel => this.DataContext as ViewModelPage ; 

Sie müssen die mit Namespace setzen Deklaration des ViewModel im oberen Bereich des Code-Behind (in der Tat, was Sie für vm in XAML-Seite getan haben).

Mit der Ansichtsmodell Definition richtig gemacht, sollten Sie nicht die bekommen „... konnte nicht gefunden werden“ Fehler.

Jetzt für die Bindung: Verwenden Sie x: Bind, weil es eine Verbesserung gegenüber der klassischen Bindung ist. Siehe meine Antwort here explaining the advantages of x:Bind. Eine wichtige Sache zu erinnern ist die Bindung Modus auf "OneWay" (oder "TwoWay", wenn dies in einigen Fällen wie Aktualisieren einer TextBox anwendbar) lieber als die Standardeinstellung "OneTime" wenn Mode Definition wird vermisst.

Stellen Sie sicher, dass die Title Eigenschaft das PropertyChanged-Ereignis auslöst, um die Bindung zu aktualisieren (wenn Sie den Titel dynamisch ändern).Die Ansichtsmodell Seite soll auch auf ausgerichtet werden, um dies zu erleichtern: Wenn Sie die Vorlage 10 Mustern folgen, leitet das Ansichtsmodell Seite von ViewModelBase und Eigenschaften haben Zugriff auf die RaisePropertyChanged Methodenaufruf, so dass Ihr Titel Eigentum soll wie folgt aussehen:

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

Ein anderes Verfahren Namen für verwendet werden können RaisePropertyChanged wie Set oder SetProperty. Sorry, wenn das ein bisschen spät kommt aber hoffe es hilft.