Bindings
-
Hallo,
Ich hätte generell eine Frage zu Bindings, da ich keine Seite finde, auf der es einfach und verständlich erklärt ist.
Wie kann ich ein Attribut der xaml Datei an ein Attribut aus der Code Behind Datei binden, also den Text einer Textbox an einen String, oder die Farbe eines Buttons an ein Attribut des zugehörigen Typs oder ähnliches.Danke im Voraus
-
Was erwartest du für eine Antwort? Es gibt etliche Seiten, Bücher Tutorials und Videos, die das Binding erklären. Es lässt sich auch nicht in 2 Sätzen beschreiben, komplex genug ist es.
Generell ist es so, dass du an Klassen und Member von Klassen bindest und nicht an Strings. Du musst irgendwo (vielleicht im übergeordneten Dialog) eine Binding Source setzen, und dann bindest du Properties von Controls an Attribute von Klassen. Und ich werd jetzt nicht nochmal schreiben, was schon tausende vor mir geschrieben haben.
Hier, einer der ersten Treffer bei Google, schaut überschaubar aus:http://www.codeproject.com/Articles/18270/A-Guided-Tour-of-WPF-Part-3-Data-binding
-
Gut, wenn ich präziser werden muss:
Ich möchte die IsEnabled Eigenschaft eines Buttons mit der Eigenschaft b einer Klasse verbinden. So, wie ich es im Code stehen habe, funktioniert es nicht.<Page x:Class="einName.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="320" d:DesignWidth="525" Title="Page1"> <Grid> <Button IsEnabled="{Binding Source=einA, Path=b}"> Starten </Button> </Grid> </Page>
namespace einName { public partial class Page1 : Page { a einA = new a(); public Page1() { InitializeComponent(); } } class a { public bool b=false; } }
-
Du kannst nicht an Felder binden, du brauchst ein Property.
-
Okay, ich habe jetzt die Klasse etwas geändert, so dass ich jetzt eine Property habe und es funktioniert alles. Gibt es eine Möglichkeit das this.DataContext=einA; wegzulassen und einA stattdessen beim Binding in die Source Eigenschaft zu schreiben?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.ComponentModel; namespace einName { public partial class Page1 : Page { a einA = new a(); public Page1() { InitializeComponent(); this.DataContext = einA; } } class a : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) { if (PropertyChanged != null) PropertyChanged(this, e); } private bool _b=false; public bool b { get { return _b; } set { _b = value; OnPropertyChanged(new PropertyChangedEventArgs("b")); } } } }
... IsEnabled="{Binding Path=b}" ...