2016-05-16 6 views
1

Ich habe ein kleines Problem, einen TextBlock Text an eine Zeichenfolge in meinem Ansichtsmodell zu binden.
Ich folgte dem Leitfaden von Microsoft, aber ich komme einfach nicht dazu. HierViewModel erscheint nicht in {x: Bind}

ist die Ansicht Modellklasse:

public class LoginPageViewModel 
{ 
    public LoginPageViewModel() 
    { 
     title = "Space Agency"; 
    } 

    public string title { get; set; } 
} 

Der Code hinter:

public LoginPage() 
    { 
     this.InitializeComponent(); 

     this.vm = new LoginPageViewModel(); 
    } 

    public LoginPageViewModel vm { get; set; } 

und die XAML:

<Page 
x:Class="SpaceAgency.LoginPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:SpaceAgency" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"> 
<Grid x:Name="rootGrid" Background="White"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <TextBlock Text="" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
    <Button Content="Login" FontSize="20" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Top"/> 


</Grid> 

Das Problem ist die vm ist bei Verwendung nicht angezeigt {x: Binde}.

denke ich, ich bin etwas sehr einfach fehlen, so wäre schön, wenn du mir den Weg zeigen könnte;)

Danke,

Crowland

Antwort

0

OK, um die Lösung selbst gefunden.

Sie müssen einen Verweis auf den ViewModels-Ordner hinzufügen und den DataContext in XAML festlegen.

<TextBlock Text="{Binding title}" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/> 

Dies ist nicht x: Bind aber es ist fein

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:SpaceAgency" 
xmlns:ViewModels="using:SpaceAgency.ViewModels" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

x:Class="SpaceAgency.LoginPage" 
mc:Ignorable="d"> 
<Page.DataContext> 
    <ViewModels:LoginPageViewModel/> 
</Page.DataContext> 

Jetzt kann ich die Bindung an den Titel gesetzt.

+1

selbst binden, wenn dies funktioniert, sollten Sie von @Bart verwenden erwägen, um die Antwort wirklich - x: Bind (Compile-Zeit-Bindung) ist die neue und meiner Meinung nach bessere Lösung für WPF-Bindungen. Es beschleunigt auch die Leistung Ihrer Anwendung, wenn sie richtig verwendet wird. – TryToSolveItSimple

1

Sie haben vergessen, die DataContext-Eigenschaft in Ihrem Konstruktor festzulegen. Tun Sie das und alles funktioniert. Wenn Sie möchten, dass Ihre title-Eigenschaft zur Laufzeit aktualisiert wird, müssen Sie auch INotifyPropertyChanged implementieren, aber für Inhalte, die einmalig sind, ist Ihre Lösung in Ordnung.

public sealed partial class LoginPage : Page 
{ 
    public LoginPage() 
    { 
     InitializeComponent(); 

     Vm = new LoginPageViewModel(); 
     DataContext = Vm; 
    } 

    public LoginPageViewModel Vm { get; set; } 
} 

Ihre XAML wird dann IntelliSense haben für x:

<TextBlock Text="{x:Bind Vm.title}" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/>