2017-01-03 6 views
0

Ich bin neu in UWP und habe Probleme beim Erfassen von verbindlichen Daten aus einer MS SQL-Datenbank.Windows 10 UWP Bind Controls mit WCF

Ich habe ein einfaches View-Modell, das ich durch den Konsum eines WCF-Vertrags bevölkere;

Ich habe versucht, mein View-Modell in OnNavigateTo mit etwas ähnliches zu füllen;

await ViewModel.LoadData(); 

Und verbindlich wie;

<TextBox Text="{x:Bind ViewModel.firstname, Mode=TwoWay}" Name="userID"/> 

Doch obwohl die Daten korrekt von SQL Server zurückgegeben wird, bindet es nie an die Steuerung.

Wenn ich Folgendes tue, funktioniert es wie erwartet;

this.userID.Text = u.firstname; 

Ich kann einfach nicht für das Leben von mir herauszufinden, was ich vermisse.

Antwort

0

OK ... Basierend auf dem bereitgestellten Xaml-Markup und C# -Code scheint es, dass Sie das OnNavigatedTo-Ereignis verwenden, um die LoadData-Methode eines Viewmodel auszulösen, das in Ihrem Codebehind deklariert ist. Es wird angenommen, dass mindestens eine Eigenschaft des Stringtyps "Vorname" im Viewmodel vorhanden ist und das Viewmodel INotifyPropertyChanged implementiert. im Code so zurück, wenn Sie die Aufgabe warten, wird es die Benutzer-Objekt zurück - -

Wenn ich es richtig,

Die Loaddata gibt ein Task<User> abgeleitet aus diesem Grund die Textwert Werkseinstellung.

Ihr Textfeld ist an die Eigenschaft firstname des ViewModel gebunden, daher müssen Sie diesen Wert beim Abrufen des Benutzerobjekts festlegen. Es gibt keinen Grund, den Code zurück zu geben.

public async Task LoadData() 
{ 
    UserDataFunctions functions = new UserDataFunctions(); 
    //not sure what usr is??? 
    usr = await functions.GetUserDetails(); 
    //set viewmodel firstname property 
    firstname = usr.firstname; 
} 
0

Ohne den Code-Behind zu sehen, ein Problem, das ich vor kurzem hatte, da ich auch bin neu, ist zu bestimmen, wie es in dem Code-Behind zu definieren, so XAML darauf zugreifen kann.

In View.xamls.cs:

public MyViewModelClass ViewModel {get; set;} 

public View() 
{ 
    this.InitializeComponent(); 

    ViewModel = new MyViewModelClass(); 
} 

dann in XAML nennen es genau wie Sie tun:

<TextBox Text="{x:Bind ViewModel.firstname, Mode=TwoWay}" Name="userID"/> 
0

Sie nicht in der Lage sind, die Daten auf Vorlast zu sehen, weil DataContext nicht ist für die Bindung festlegen. Sie müssen Ihren XAML wissen lassen, woher Ihre Daten stammen.

Fügen Sie die folgende Zeile hinzu, nachdem Sie Daten von Ihrem Ansichtsmodell erhalten haben.

User data = await ViewModel.LoadData(); 
this.DataContext = data; 

und XAML wird

<TextBox Text="{x:Bind firstname, Mode=TwoWay}" Name="userID"/>