Properties

B

besy

Hallo,

ich habe mir ein englischsprachiges WPF Buch zugelegt und scheinbar eines erwischt was schon einiges an Programmierkenntniss vorraussetzt. Immer wieder muss ich Sachen goggeln auf die im Buch gar nicht näher eingegangen wird, weil wohl selbstverständlich.

Nun hänge ich aber im Kapitel "DataBinding" fest und hoffe ihr könnt mir helfen. Ich poste das hier, weil obwohl es um WPF geht ist das Problem eher anderer Natur :)
Im Buch wird folgendes verlangt, ohne jede weitere Erklärung:

I have created a Person object with FirstName and LastName public properties. There is also a public property called Address of type Address which has Street, City and State properties.

Nachdem ich erstmal geschaut habe was Properties überhaupt sind, habe ich folgendes gemacht:

C#:
public class Person
{
    private string firstName;
    private string lastName;

    public FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }

    public LastName
    {
        get { return lastName; }
        set { lastName = value; }
    }
}

Das geht soweit auch. Was mir Probleme macht ist die Adresse. Wie erstelle ich eine Property die ihrerseits wieder mehrere Properties hat ? Ich komm da nicht dahinter...

lg
 
Was mir Probleme macht ist die Adresse. Wie erstelle ich eine Property die ihrerseits wieder mehrere Properties hat ?

Hallo besy,

ich denke, das damit eine Struktur gemeint, die die Adressdaten aufnimmt und diese dann als Property bereitstellt.

Properties benötigen immer auch einen Typ. Den hattest du bei LastName und FirstName vergessen.

Da du wahrscheinlich mit einer aktuellen .NET-Version arbeitest, kannst du dir Schreibarbeit sparen, indem du die sog. automatischen Properties verwendest. Man braucht dann nicht mehr extra Membervariablen anzulegen.

Hier das Beispiel:
C#:
public class Person
{
    public string  FirstName { get; set; }
    public string  LastName  { get; set; }
    public Address Address   { get; set; }
    
    public struct Address
    {
        public string street;
        public string city;
        public string state;
    }
}
Gruß
MCoder
 
Hallo,

danke für die Antwort.
Hab das mal so versucht, das struct musste ich umbennen weil er mich 2mal "Address" nicht benutzen lassen wollte (als struct Name und als Property) aber das müsste ja egal sein, hab es einfach mal "Data" genannt.:

Initialisiert hab ichs dann so:

C#:
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        Person p1 = new Person();
        p1.FirstName = "Lara";
        p1.LastName = "H.";
        Person.Data address = new Person.Data();
        address.City = "weit weg";
        address.State = "noch weiter weg";
        address.Street = "ganz weit weg";
        p1.Address = address;
        this.DataContext = p1; //Das hab ich auch ewig gesucht...
    }
}

Ich muss ja erst ein Struct erstellen, weil die Property Address ja jetzt nur ein ganzes struct erwartet und zurückgibt, die einzelnen Werte wollte er mich nicht einzelnen setzen lassen.
Das DataBinding klappt nun für FirstName und LastName, bei der Adresse aber leider nicht. Im Buch bindet er 3 Textboxen jeweils an Address.Street, Address.City und Address.State, geht das für mich jetzt überhaupt ? Weil die Property gibt ja nur das ganze struct zurück.
 
die einzelnen Werte wollte er mich nicht einzelnen setzen lassen.
Ja stimmt, bei Strukturen bekommt man einen Fehler CS1612. Wenn du aber stattdessen eine Unterklasse verwendest, geht es:
C#:
public class Person
{
    public Person() { Address = new Data(); }
    
    public string   FirstName { get; set; }
    public string   LastName  { get; set; }
    public Data     Address   { get; set; }
    
    public class Data
    {
        public string street;
        public string city;
        public string state;
    }
}

...

Person p = new Person();
          
p.FirstName      = "A";
p.LastName       = "B";
p.Address.street = "abc";
p.Address.city   = "city";
p.Address.state  = "state";
Gruß
MCoder
 

Neue Beiträge

Zurück