WPF XAML und EntityFramework



  • Hallo

    Such schon mal wieder eine Längere zeit nach einer Lösung. Und denke das es Zeit ist die Frage zu posten.

    Dieses mal geht es um EntityFramework und WPF.

    Ich habe eine Tabelle die eine 1 zu n Beziehung zu einer anderen besitzt. Sagen wir eine Person hat eine Adresse und eine Adresse kann zu mehreren Personen gehören.

    Das Personenobjekt hat eine ID, einen Namen, eine ID einer Adresse und den Bezug zur Adresse selber.

    Wenn ich die Person nun bearbeiten zeige ich unter anderem eine Combobox für die Adresse an.

    Ändere ich nun die Adresse in der Combobox wird der Bezug der Adresse geändert. Nicht allerdings die ID zur Adresse.

    Wie löst man das nun am besten. Sprich wenn ich den Bezug zur Adresse ändert soll sich auch die ID zur Adresse ändern und umgegehrt.

    Kann mir jemand helfen.

    Hoffe ich habe nichts vergessen und man versteht was ich will. Ich übe mich auch etwas in Geduld. Darf ich morgen Abend nochmals nachfragen wenn keiner antwortet oder ist das zu früh?



  • Die ID der Adresse in der Personentabelle ist doch nichts anderes als ein Fremdschlüssel. Wenn du in deiner Combobox also die Adresse anzeigst aber der SelectedValue auf die ID der Adresse geht dann kannst du es doch ändern.
    Zeig mal Code



  • Jo, weiß ich dass ich das ändern muss. Aber wie? Hier mal Code:

    View:

    <ComboBox DisplayMemberPath="Name"
              IsSynchronizedWithCurrentItem="True"
              ItemsSource="{Binding AvailableAddresses}"
              SelectedItem="{Binding CurrentAddress}" />
    

    ViewModel:

    public class MyViewModel
    {
        public MyViewModel()
        {
            AvailableAddresses = new ObservableCollection<Address>{ _dbContext.Addresses }
        }
    
        public ObservableCollection<Address> AvailableAddresses
        {
            //get/set mit PropertyChanged Event
        }
    
        public Address CurrentAddress
        {
           // get/set, Mapping zu Model, und PropertyChanged Event
        }
    }
    

    Model generiert von EF

    public partial class Address
    {
            public Address()
            {
                this.Persons = new HashSet<Person>();
            }
    
            public int ID { get; set; }
            public string Name { get; set; }
    
            public virtual ICollection<Person> Persons { get; set; }
    }
    


  • <ComboBox DisplayMemberPath="Name"
             IsSynchronizedWithCurrentItem="True"
             ItemsSource="{Binding AvailableAddresses}"
             SelectedValue="{Binding "FremdschlüsselIDFeldname in deinem PersonenObjekt",Mode=TwoWay}"
             SelectedItem="{Binding CurrentAddress}"
             SelectedValuePath="ID"/>
    


  • IsSynchronizedWithCurrentItem="True"

    Hmm...wir benutzen es nicht. Und denk dran deinen ObjektConext zu speichern. Ansonsten landet auch nichts in der DB



  • Hallo secondsun.

    Danke für die Antwort. So gehts danke.

    IsSynchronizedWithCurrentItem wird eigentlich schon benötigt. Kann sein dass der defaultwert bei der Combobox schon true ist.

    Bei anderen Controls wie der Listview usw. muss man es aber setzen. Ich setzte es grundsätzlich.

    Gruß


Log in to reply