myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » ObservableEntityCollection Entity Framework [2 Way Binding WPF]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

ObservableEntityCollection Entity Framework [2 Way Binding WPF]

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Ayke Ayke ist männlich
myCSharp.de-Mitglied

avatar-2293.gif


Dabei seit: 28.06.2006
Beiträge: 643
Entwicklungsumgebung: VS2005
Herkunft: Hamburg


Ayke ist offline

ObservableEntityCollection Entity Framework [2 Way Binding WPF]

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ObservableEntityCollection für das Entity Framework

Nachdem mir aufgefallen ist, das ich mit den ObjectSet von Entity Framework
kein 2 Way Binding zu einen WPF Control machen kann, weil es nicht von ICollectionChanged erbt hab ich folgendes geschrieben.

C#-Code:
    public class ObservableEntityCollection<TEntity> : ObservableCollection<TEntity> where TEntity : class
    {
        private ObjectSet<TEntity> _objectSet = null;
        public delegate int SaveChangesMethod();
        private SaveChangesMethod SaveChanges = null;

        public ObservableEntityCollection(ObjectSet<TEntity> entity)
        {
            Init(entity, null);
        }

        public ObservableEntityCollection(ObjectSet<TEntity> entity, SaveChangesMethod SaveChanges)
        {
            Init(entity, SaveChanges);
        }

        private void Init(ObjectSet<TEntity> entity, SaveChangesMethod SaveChanges)
        {
            this._objectSet = entity;
            this.SaveChanges = SaveChanges;

            foreach (var item in _objectSet)
            {
                if (item is INotifyPropertyChanged)
                {
                    INotifyPropertyChanged notifyPropertyChanged = item as INotifyPropertyChanged;
                    notifyPropertyChanged.PropertyChanged += new PropertyChangedEventHandler(notifyPropertyChanged_PropertyChanged);
                }
                base.InsertItem(this.Count, (TEntity)item);
            }
        }

        void notifyPropertyChanged_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            TEntity _objectSetItem = (TEntity)sender;
            SetItem(this.IndexOf(_objectSetItem), _objectSetItem);
        }

        protected override void InsertItem(int index, TEntity item)
        {
            if (_objectSet == null)
                return;

            _objectSet.AddObject(item);

            if (SaveChanges != null)
                SaveChanges();

            base.InsertItem(index, item);
        }

        protected override void SetItem(int index, TEntity item)
        {
            if (_objectSet != null)
                return;

            var _objectSetItem = _objectSet.ElementAt(index);
            if (_objectSetItem != null)
                _objectSetItem = item;

            if (SaveChanges != null)
                SaveChanges();

            base.SetItem(index, item);
        }

        protected override void RemoveItem(int index)
        {
            if (_objectSet != null)
                return;

            var _objectSetItem = _objectSet.ElementAt(index);
            if (_objectSetItem != null)
                _objectSet.DeleteObject(_objectSetItem);

            if (SaveChanges != null)
                SaveChanges();

            base.RemoveItem(index);
        }

        protected override void MoveItem(int oldIndex, int newIndex)
        {
            if (_objectSet != null)
                return;

            var _objectSetItemOld = _objectSet.ElementAt(oldIndex);
            if (_objectSetItemOld != null)
            {
                var _objectSetItemNew = _objectSet.ElementAt(newIndex);
                if (_objectSetItemNew != null)
                    _objectSetItemNew = _objectSetItemOld;

            }

            if (SaveChanges != null)
                SaveChanges();

            base.MoveItem(oldIndex, newIndex);
        }

        protected override void ClearItems()
        {
            foreach (var item in _objectSet)
            {
                _objectSet.DeleteObject(item);
            }

            if (SaveChanges != null)
                SaveChanges();

            base.ClearItems();
        }
    }

ObservableEntityCollection, ObservableCollection, Entity, Entity Framework, 2 Way Binding, WPF
30.04.2011 10:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Jahre.
Der letzte Beitrag ist älter als 9 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.05.2020 06:53