The Artima Developer Community
Sponsored Link

.NET Buzz Forum
WPF: Objekte manuell an Controls binden

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
-

Posts: 1524
Nickname: nitronic
Registered: Jul, 2006

Norbert Eder works as a software architect.
WPF: Objekte manuell an Controls binden Posted: Nov 20, 2007 3:56 AM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by -.
Original Post: WPF: Objekte manuell an Controls binden
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Latest .NET Buzz Posts
Latest .NET Buzz Posts by -
Latest Posts From Norbert Eder - Living .NET

Advertisement
DataBinding ist eine wichtige Sache. Schließlich wollen Daten auf der Programmoberfläche ja auch angezeigt werden. Nun stellt sich die Frage, wie dies per Sourcecode-Anweisungen geschehen kann. Hier ein kleines Beispiel dazu.

Gegeben sei folgende Oberfläche:
<Window x:Class="DataBindingDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DataBindingDemo" 
    Height="150" 
    Width="300">
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="75"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Label x:Name="FirstnameLabel" 
               Content="Firstname" 
               Grid.Column="0" 
               Grid.Row="0"/>
        <Label x:Name="LastnameLabel" 
               Content="Lastname" 
               Grid.Column="0" 
               Grid.Row="1"/>
        <TextBox x:Name="FirstnameTextBox" 
                 Grid.Column="1" 
                 Grid.Row="0"/>
        <TextBox x:Name="LastnameTextBox" 
                 Grid.Column="1" 
                 Grid.Row="1"/>
        <Button x:Name="ShowValuesButton" 
                Grid.Column="1" 
                Grid.Row="2" 
                Content="Show Values"/>
    </Grid>
</Window>

Also nicht wirklich etwas Besonderes, zwei TextBoxen und ein Button, um zu überprüfen, ob die Änderungen auch tatsächlich übernommen wurden.

Nun benötigen wir für unser Beispiel noch eine Klasse Person. Ein Objekt dieses Typs wird anschließend an die beiden Textfelder gebunden:
public class Person
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }

    public Person(string firstname, string lastname)
    {
        Firstname = firstname;
        Lastname = lastname;
    }
}

Die Klasse ist erstellt, nun kommt das eigentliche Binding. Im Konstruktor von Window1 rufen wir eine Methode Init auf, die uns einen EventHandler für das Click-Ereignis des Buttons erstellt, damit die Änderungen angezeigt werden und somit überprüft werden kann, ob das dahinterliegende Objekt auch tatsächlich die korrekten Werte enthält. Weiters wird das Binding definiert.
public partial class Window1 : Window
{
    private Person p;

    public Window1()
    {
        InitializeComponent();

        Init();
    }

    private void Init()
    {
        ShowValuesButton.Click += 
            new RoutedEventHandler(ShowValuesButton_Click);

        p = new Person("Norbert", "Eder");
        Binding firstBinding = new Binding();
        firstBinding.Source = p;
        firstBinding.Path = new PropertyPath("Firstname");

        FirstnameTextBox.SetBinding(TextBox.TextProperty, firstBinding);

        Binding lastBinding = new Binding();
        lastBinding.Source = p;
        lastBinding.Path = new PropertyPath("Lastname");

        LastnameTextBox.SetBinding(TextBox.TextProperty, lastBinding);
    }

    void ShowValuesButton_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(
            String.Format("Lastname: {0} -- Firstname: {1}", 
                p.Lastname, 
                p.Firstname));
    }
}

Was wir also für das Binding benötigen ist ein Objekt des Typs Binding. Diesem Objekt muss eine Source übergeben werden. Dies kann wiederum ein beliebiges Objekt sein - in unserem Fall ein Objekt des Typs Person. Mit Hilfe der Eigenschaft Path kann nun festgelegt werden, welche Eigenschaft des an die Source übergebenen Objektes gebunden werden soll.

Schließlich muss am Ziel-Control noch das Binding mit Hilfe der Methode SetBinding gesetzt werden. Hierzu ist die gewünschte DependencyProperty (beschreibt welche Eigenschaft des Controls befüllt werden soll) anzugeben und das zuvor erstellte Binding-Objekt. Das gleiche wird nun auch für das zweite Textfeld durchgeführt.

Zur Laufzeit sieht das dann so aus:


Nach jeder Änderung eines der Textfelder sollte die MessageBox diese Änderung auch tatsächlich anzeigen. Wenn dem so ist, dann kann man sich zu einem erfolgreich durchgeführten DataBinding gratulieren.

Read: WPF: Objekte manuell an Controls binden

Topic: WPF: Element innerhalb eines Canvas per Sourcecode positionieren Previous Topic   Next Topic Topic: Ruby, Rails, Rails Plugins, JavaScript, HTML, CSS

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use