2012-04-09 3 views
1

Ich habe Wpf-App für die Arbeit am Personenobjekt. Person Struct ist Sql-Server-Tabelle und ich verwende Linq-zu-Sql für mein Projekt (also gibt es Klasse in dbml beziehen sich auf Person).WPF-Fenster Titelbindungsbasis auf Information Class?

Ich habe Formular zum Aktualisieren oder Einfügen von Personen (einfaches modales Fenster). In diesem Fenster habe ich Peoperty die aktuellen Wert der Person haben.

public Person CurrentPerson { get; set; } 

Also, was ich suche ist:

Wie binden Titel dieses Fensters Basis auf CurrentPerson.FullName? und absolut Window Title muss sich ändern, wenn CurrentPerson.FullName geändert wurde!

Edit: Mehr Infos
Ich möchte auf CurrentPerson.Name Fenstertitel Basis ändern ebenso nicht gesetzt gleiche wie CurrentPerson.Name. Also könnte sich etwas ändern. Auch ich habe vorher gesucht this und dieses Question über das Ändern des Teils von Titel gesucht. aber ich muss einen Teil des Titelbasiswerts ändern.

Antwort

1

Zunächst sollte Ihr Codebehind oder Viewmodel INotifyPropertyChanged implementieren. Danach implementieren eine Eigenschaft WindowTitle wie folgt aus: diese

public string WindowTitle 
{ 
    get { return "Some custom prefix" + CurrentPerson.FullName; } 
} 

nach, wenn Ihre Änderung der FullName auf CurrentPerson, nur PropertyChanged Ereignis werfen, zum Beispiel:

Person _currentPerson; 
public Person CurrentPerson 
{ 
    get { return _currentPerson; } 
    set 
    { 
     _currentPerson = value; 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs("WindowTitle")); 
    } 
} 

EDIT: Bitte senden Sie Ihre Xaml Code für die Bindung, die auf Ihren Kommentar auf dem Post von Novice, scheint wie der Schuldige. Überprüfen Sie auch, ob Sie die WindowDataContext auf sich selbst stellen.

+0

Danke Ich habe 'DataContext' für das aktuelle Fenster nicht festgelegt. nach dem Einstellen funktionierte es gut. – Rev

1

Sie können es wie folgt tun:

Person _currentPerson; 
public Person CurrentPerson 
{ 
    get { return _currentPerson; } 
    set 
    { 
     _currentPerson = value; 
     this.Title = value.FullName; 
    } 
} 
+0

Danke gut. aber ich will binden! – Rev

+1

@Rev Ich würde gerne sehen, ob jemand dies tun kann, oder erklären, warum es nicht möglich ist. Es scheint, dass normale Bindungsmethoden in diesem Fall nicht funktionieren, aber ich weiß nicht warum. – McGarnagle

+0

Ja versuche ich sogar Abhängigkeit prop oder konverter aber ich kann das nicht tun. Ich weiß nicht wie ich das machen soll, vielleicht kann mir jemand helfen! – Rev

2

bearbeiten: Gelöschte die alte Antwort, weil ich völlig die Frage falsch verstanden.

Das Problem liegt wahrscheinlich in Ihrer Bindung. Ich denke, die Bindung schlägt fehl, weil sie nicht entscheiden kann, wo nach CurrentUser(binding source) gesucht werden soll. Können Sie dies versuchen -

Edit 2: Sie Ihre Steuer benennen können und dann diesen Namen Element in Bindung, wie:

<Window x:Class="TestApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="{Binding ElementName=MW,Path=CurrentUser.FullName, StringFormat='Welcome \{0\}!'}"   
    Name="MW"> 

Wenn dies nicht für Sie ermöglichen WPF Debuggen funktioniert Bindung Ausdrücke gehen zu:

Tools -> Options -> Debugging -> Output Window -> WPF Trace Settings [dieses ist für VS2010; sollte für andere ähnlich sein.]

und prüfen, ob es einen verbindlichen Fehler gibt und wenn ja, was es ist.

+0

@Rev: Oh, ich habe das Linq-zu-Sql-Bit verpasst. Das wird die Down-Abstimmung erklären (was in Ordnung ist). Ich hoffe, ich habe das Problem jetzt verstanden. – NoviceProgrammer

+0

@Rev: wusste nicht, ob Sie ein benutzerdefiniertes Steuerelement für eine Titelleiste oder das normale Standardfenster verwenden. – NoviceProgrammer

+0

+1 für wpf debuggen und auch Ihre Aufmerksamkeit – Rev

Verwandte Themen