Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Využij akce až 80 % zdarma při nákupu e-learningu - více informací. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Swift
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:11.3.2018 14:03

Čau programuji ve WPF a náhodou jsem narazil na ICollectionView doteď jsem používal ObservableCollec­tion. Může mi rposím někdo říct co je lepší používat a v čem jsou například odlišnosti ? Předem děkuji za každou radu. :)

 
Odpovědět
11.3.2018 14:03
Avatar
Odpovídá na Petr Klekner
Marian Benčat:11.3.2018 17:54

Je to jen mírně složitější,.. Nejjednodušší odpověď je, že pokud je to kolekce, která je přímo pro VIEW (WPF), tak použij klidně ICollectionView, nebo ObservableCollec­tion, pokud je to někde jinde (protože ObservableCollec­tion rozhodně neslouží jen pro UI), tak používej ObservableCollec­tion a NIKDY NE ICollectionView

Mírně složitější odpověď je, že na UI vrstvě je to úplně jedno, protože i když tam šoupneš ObservableCollec­tion, tak si WPFko šáhne po default ICollectionView.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
11.3.2018 17:54
Totalitní admini..
Avatar
Odpovídá na Petr Klekner
don.jarducius:11.3.2018 21:03

ICollectionView je rozhraní, není to typ. Rozhraní ti jen obecně popisuje co má třída, která jej implementuje mít za vlastnosti a funkce.

https://msdn.microsoft.com/…vs.110).aspx

https://www.itnetwork.cz/…ace-rozhrani

Nahoru Odpovědět
11.3.2018 21:03
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Odpovídá na don.jarducius
Marian Benčat:11.3.2018 22:18

koukám, že ty o tom vůbec nic nevíš, že? :-) třeba k čemu ten ICollectionView slouží a jak to souvisí s Observable kolekcí:D

Nahoru Odpovědět
11.3.2018 22:18
Totalitní admini..
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Marian Benčat
Petr Klekner:12.3.2018 13:00

Moc děkuji za odpověď :) Myslím si, že tomu snad rozumím :) Takže je spíše lepší používat ObservableCollec­tion.

 
Nahoru Odpovědět
12.3.2018 13:00
Avatar
Odpovídá na Petr Klekner
Marian Benčat:12.3.2018 13:17

Pointa je v tom, že ICollectionView je něco, co si vybuduje WPFko auomaticky při bindování na observable kolekci (mám za to, že nemusí být obervable) v momentě, kdy je na cílové komponentě povoleno různé filtrování, řazení atp.

Je to ale poměrně MVVM specifická věc, proto je obecně dobrý používat ICollectionView (a jeho impelmentace) na UI vrstvě (né v modelu, ale třeba ve viewmodelu, u komponent atd.) a naopak používat na logické vestvě observable kolekci..

Samotné ICollectionView je tedy spíše věcí pro zobrazení, než pro nějaké uchování dat. Je to ostatně podobné jako třeba u databází.. V DB máš tabulku místem, kde jsou dat auchována (podobně jako třeba u Obs kolekce) a pak máš nějaké DB View, které v 99% případu je readonly transformace dat pro výstup (podobně jako Icollection view).

Ve skutečnosti pokud ty nabinduješ nějakou tu itemlist komponentu na kolekci, tak si WPF pomocí třídy CollectionView­Source řekne o implicitní Viewčko.

Pak s tím jdou dělat různá kouzla.. například můžeš X komponent napojit na stejné ICollectionView a pak sdílejí řazení, filtrování atd.

Nahoru Odpovědět
12.3.2018 13:17
Totalitní admini..
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Marian Benčat
don.jarducius:12.3.2018 18:34

Dostuduj si, než dáváš mínusy, stačí se podívat do dokumentace ... 1. odkaz co jsem posílal...

https://msdn.microsoft.com/…vs.110).aspx
Dole je poznámka, která říká, které třídy jej standardně implementují.

Např. CollectionView, které v konstruktoru přijímá cokoli co impelemtuje rozhraní IEnumerable
Viz.https://msd­n.microsoft.com/cs-cz/library/sys­tem.windows.da­ta.collection­view(v=vs.110)­.aspx
... tudíž se nemusí jednat pouze o Observable ale i obyčejný list nebo pole.

ICollectionView je prostě jen a **pouze rozhraní, **nic víc, nemá žadnou funkčnost, pouze ji popisuje.
Doporučuju dostudovat co je třída a co je rozhraní... z tvých příspěvků v tomhle vlákně to mícháš jak jablka a hrušky

Následná implementace v komponentách MVVM je pak jiná věc.

Třídy s rozhraním ICollectionView, jak už název napovídá slouží k pohledům na kolekce a obsahují spoustu metod které zjednodušují práci s filtrováním, řezením, úpravama ...
Proto se výborně hodí pro bindy, komponenta, která je používá je potom jednodušší na nakódování.

Nahoru Odpovědět
12.3.2018 18:34
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Nahoru Odpovědět
12.3.2018 18:49
Totalitní admini..
Avatar
Odpovídá na don.jarducius
Marian Benčat:12.3.2018 18:53

Tam já si jdu nastudovat co je to ten interface, díky za tip :D

Nahoru Odpovědět
12.3.2018 18:53
Totalitní admini..
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Marian Benčat
David Čápka:12.3.2018 19:16

2 urážlivé příspěvky za sebou, ani jeden neobsahuje žádný argument nebo užitečnou informaci. Chybu jsi udělal ty, že je to interface jsi měl napsat hned na začátku, ale to ti asi došlo, proto se zřejmě takhle chováš a nenapíšeš žádný argument. Jestli chceš ban, stačí to říct rovnou a nedělat tady kašpara.

Nahoru Odpovědět
12.3.2018 19:16
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Marian Benčat:12.3.2018 20:25

Jujky, tys tu chyběl, posluz si, cenzorku

Nahoru Odpovědět
12.3.2018 20:25
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.