{"id":43,"date":"2009-10-15T10:13:15","date_gmt":"2009-10-15T09:13:15","guid":{"rendered":"http:\/\/blog.kalmbach-software.de\/de\/2009\/10\/15\/currentitem-einer-observablecollection-ermittelnandern\/"},"modified":"2012-03-05T21:12:54","modified_gmt":"2012-03-05T20:12:54","slug":"currentitem-einer-observablecollection-ermittelnandern","status":"publish","type":"post","link":"http:\/\/blog.kalmbach-software.de\/de\/2009\/10\/15\/currentitem-einer-observablecollection-ermittelnandern\/","title":{"rendered":"CurrentItem einer ObservableCollection ermitteln\/\u00e4ndern"},"content":{"rendered":"<p>In letzter Zeit mach ich mehr mit WPF rum. Hierbei spielt ja das <a href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/dd419663.aspx\">MVVM-Pattern<\/a> eine gro\u00dfe Rolle. Darin werden f\u00fcr \u00e4nderbare Listen oft eine &#8220;<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms668604.aspx\">ObservableCollection<\/a>&#8221; verwendet. Diese informiert alle beteiligten dar\u00fcber, wenn ein Element gel\u00f6scht oder hinzugef\u00fcgt wurde. Auch unterst\u00fctzt es dabei das Feature eines &#8220;CurrentItems&#8221;. Nur konnte ich dieses bisher nie \u00fcber irgendwelche Methoden aus dem View-Model heraus ansprechen&#8230; immer nur durch WPF-Elemente war dies m\u00f6glich. So hat z.B. eine <a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/system.windows.controls.listbox.aspx\">ListBox<\/a> das Property &#8220;<a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/system.windows.controls.primitives.selector.issynchronizedwithcurrentitem.aspx\">IsSyncronizedWithCurrentItem<\/a>&#8220;. Damit werden \u00c4nderungen am &#8220;CurrentItem&#8221; durch andere Controls (z.B. durch andere ListBoxen) automatisch auch in alle &#8220;angeschlossenen&#8221; \u00fcbernommen.<br \/>\nNur aus meinem ViewModel war es mir noch nicht gelungen das &#8220;CurrentItem&#8221; zu setzen (z.B. nach Button-Klick), da ich keine Methode oder Property finden k\u00f6nnte.<br \/>\nJetzt hab ich es endlich gefunden wie man auf das &#8220;CurrentItem&#8221; zugreift: Man muss sich zuerst die &#8220;DefaultView&#8221; der Collection holen. Dann kann man auch die Position des aktuelle Items \u00e4ndern.<br \/>\nz.B. um das &#8220;CurrentItem&#8221; zu setzen:<\/p>\n<pre lang=\"csharp\">var dv = CollectionViewSource.GetDefaultView(viewModel.MeineCollection);\r\ndv.MoveCurrentTo(viewModel.MeineCollection[1]);<\/pre>\n<p>oder um das CurrentItem auszulesen:<\/p>\n<pre lang=\"csharp\">var dv = CollectionViewSource.GetDefaultView(this.List);\r\nMessageBox.Show(dv.CurrentItem.ToString());<\/pre>\n<p>Hier gibt es auch ein kleines Beispielprojekt: <a href=\"http:\/\/blog.kalmbachnet.de\/files\/WPF_CurrentItem.zip\">WPF_CurrentItem.zip<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In letzter Zeit mach ich mehr mit WPF rum. Hierbei spielt ja das MVVM-Pattern eine gro\u00dfe Rolle. Darin werden f\u00fcr \u00e4nderbare Listen oft eine &#8220;ObservableCollection&#8221; verwendet. Diese informiert alle beteiligten dar\u00fcber, wenn ein Element gel\u00f6scht oder hinzugef\u00fcgt wurde. Auch unterst\u00fctzt es dabei das Feature eines &#8220;CurrentItems&#8221;. Nur konnte ich dieses bisher nie \u00fcber irgendwelche Methoden [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-alles-uber-dotnet-programmierung"],"_links":{"self":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":0,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}