Bindung Objekt-Fenster Textboxen in WPF
Habe ich eine Klasse namens Data
mit einigen öffentlichen Mitglieder: Name
, Age
, Address
.
Ich habe auch Fenster mit Textfeldern Name
, Age
, Address
.
Den Data
Objekt jederzeit ändern können.
Wie kann ich binden das Data
Objekt zu den Eingabefeldern und Folgen Sie nach dem Objekt verpasst?
Ich weiß, es ist INotifyPropertyChanged
und "dependency properties", aber ich weiß nicht wie man Sie benutzt.
Bearbeiten
public class MyData : INotifyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
OnPropertyChnged("Name");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
ProppertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(name));
}
}
XAML-code:
xmlns:myApp="clr-namespace:MyApp"
<Window.Resources><myApp:MyData x:key = data/></WindowResources>
<TextBox><TextBox.Text><Binding Source="{StaticResource data}" Path="Name" UpdateSourceTrigger="PropertyChanged"/></TextBox.Text></TextBox>
class OtherClass
{
private MyData data;
//the window that have the binding textbox
private MyWindow window;
public OtherClass()
{
data = new MyData();
data.Name = "new name"
window = new MyWindow();
window.show();
}
}
- Die Umsetzung
INotifyPropertyChanged
sollte man 5 Minuten: 2 Minuten google-ing & 3 Minuten kopieren/einfügen in Ihren code... das Erlernen der syntax zu binden Sie IhreTextBox
auf ein Objekt sollte noch weniger Zeit nehmen 🙂 - Eigentlich habe ich wpf-Buch, und ich verbringe mehr als 5 min google und ich immer noch nicht bekommen... Dies ist meine erste Zeit mit wpf und alles neu für mich
- Hinzufügen Sie können Ihren code für die Definition der StaticResource-Daten?
- Den code Hinzugefügt
- Tut dies bauen, weil Sie scheinen, ein paar Tippfehler, die einem fehlt in der OnPropertyChanged("Name") und es gibt eine extra-p in PropertyChangedEventHandler?
- Ich kann nicht kopieren und einfügen den code. Ich schrieb den code in den computer ohne internet-conection daher der Fehler. Ich fügte hinzu, mehr code, wo ich die Eigenschaft ändern und zeigen Sie das Fenster mit der Bindung textbox
- Plus, werden Ihre Schlüssel für Ihre statischen Verweis auf fehlende doppelte Anführungszeichen, "Daten", Ihr fehlt ein Punkt in der WindowResources Schließenden tag.
- Das ist eine andere Instanz von der Klasse, der Blick ist statische Ressource baut seine eigene Instanz der Klasse, also die, die Sie erstellen in OtherClass nicht gewöhnen. Sie konnte loszuwerden, die StaticResource-und dann stellen Sie die Verwendung der DataContext des Fensters, um die Instanz der Klasse, dann ändern Sie Ihre Bindung zu <TextBox Text="{Binding Name}"/>
- Ich wusste nicht, dass. Danke, ich ändere es und lassen Sie wissen. können Sie mir zeigen, Basis auf meinen code, wo (in Fenster oder Gitter oder die bestimmte textbox) zu schreiben?
- Ich bin mir nicht ganz sicher, was du meinst, meinst du die Einstellung der DataContext? Wenn ja, kannst du auch dein code-Beispiel oben : Fenster.DataContext = Daten; vor dem anzeigen des Fensters.
- Vielen Dank Paulie und Ing 'O'. Ich muss jetzt gehen, die so Krank versuchen Sie es morgen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser link von MSDN erklärt es gut.MSDN-link ist tot, das hinzufügen Verknüpfung zu einer ähnlichen Artikel.
Wenn Ihr class-Eigenschaft geändert wird, wird Ihre Immobilie steigern soll, ein OnPropertyChanged-event mit den Namen der Eigenschaft, so dass die Sicht kennt, um es zu aktualisieren ist verbindlich.
Und Ihr Textfeld sollte eine Bindung wie:
Ich habe eine Klasse ViewModelBase, die ist, wo ich umgesetzt haben meine OnPropertyChandedEvent für alle abgeleiteten Modelle zu nennen:
Window.Show();
tunWindow.DataContext = data;
Sie haben festgelegt, Ihre Instanz nun als hintergrund für das Fenster. Sie haben dann zu entfernenSource="{StaticResource data}"
aus dem XAML-code. Achtung: dies ist nur eine Möglichkeit, dies zu tun.Lassen Sie uns die Daten-Klasse implementiert INotifyPropertyChanged . Das Ereignis auslösen, wenn das jemand ändern, der Wert der Eigenschaft auf Instanzen von Daten. Dann legen Sie die richtige DataContext in Ihrer Benutzeroberfläche und binden der einzelnen ui-Elemente, wie zum Beispiel: