Xamarin.forms: [์ œ์•ˆ] CollectionViewSource ๊ตฌํ˜„

์— ๋งŒ๋“  2018๋…„ 03์›” 27์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xamarin/Xamarin.Forms

์„ค๋ช…

Silverlight, WPF ๋ฐ UWP์™€ ๊ฐ™์€ ์ฃผ์š” XAML ๊ธฐ๋ฐ˜ Microsoft ๊ธฐ์ˆ ์—๋Š” CollectionViewSource๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Xamarin Forms๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. INotifyCollectionChanged ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋ธ๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ„์˜ ๋งค์šฐ ์ค‘์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ญ๋ชฉ ๋ชฉ๋ก์˜ ์š”์†Œ๋ฅผ ์™„์ „ํžˆ ์ง€์šฐ๊ณ  ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ UI๋ฅผ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„ฑ๋Šฅ๊ณผ ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

CollectionViewSource๋Š” ๊ธฐ์ˆ  ์ „๋ฐ˜์— ๊ฑธ์ณ INotifyCollectionChanged์˜ ๊ณตํ†ต ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๊ณ  INotifyCollectionChanged ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ปจํŠธ๋กค ๊ฐ„์— ๊ณตํ†ต ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. CollectionViewSource๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ปจํŠธ๋กค์€ ์ž์ฒด์ ์œผ๋กœ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์–ด๋Š ์ •๋„ ํ•ดํ‚น์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ListView์—๋Š” ์ด ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค(https://developer.xamarin.com/api/property/System.Windows.Forms.ListView.Sorting/).

CollectionViewSource๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ปจํŠธ๋กค์ด CollectionViewSource ํด๋ž˜์Šค์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•„ํ„ฐ๋ง, ๊ทธ๋ฃนํ™” ๋ฐ ์ •๋ ฌ์„ ์œ„ํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ์ˆ˜์ค€์—์„œ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ๋ชฉ๋ก์˜ ์ •๋ ฌ์ด ๊ธฐ๋ณธ ๋ชจ๋ธ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ์ผ๋ถ€ ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ CollectionViewSource๊ฐ€ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— CollectionViewSource๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ListView ๋ฐ Picker ๋“ฑ๊ณผ ๊ฐ™์€ XF ํˆดํ‚ท์˜ ๋งŽ์€ ์ปจํŠธ๋กค์€ ์•„๋งˆ๋„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ DataGrid์— ๋Œ€ํ•œ ๊ฒƒ์ด์ง€๋งŒ ํ‘œ์ค€ XF ํˆดํ‚ท์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Xamarin Forms์— ๋Œ€ํ•œ ํ‘œ์ค€์ด ์žˆ๋Š” ๊ฒฝ์šฐ SyncFusion DataGrid์™€ ๊ฐ™์€ ํƒ€์‚ฌ ์ปจํŠธ๋กค์„ ํ‘œ์ค€ Microsoft ํ‘œ์ค€๊ณผ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MSDN ๊ธฐ์‚ฌ
https://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.110).aspx

WPF ์ƒ˜ํ”Œ
https://github.com/Microsoft/WPF-Samples/tree/master/Data%20Binding/CollectionViewSource

๊ธฐ์‚ฌ:
https://www.hanselman.com/blog/CollectionViewSourceIsCrazyUsefulForBindingToFilteredObservableCollectionsOnWindowsPhone8.aspx

collectionview high impact proposal-open enhancement โž•

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  20 ๋Œ“๊ธ€

ListViews, Pickers ๋ฐ ๋” ๋งŽ์€ ์ปจํŠธ๋กค์€ ์ด๋ฏธ INCC ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

@StephaneDelcroix , ์ถฉ๋ถ„ํžˆ ๊ณตํ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•„์š”ํ•œ ๊ฒƒ์€ ํ‘œ์ค€ INotifyCollectionChanged ๊ธฐ๋Šฅ์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ INCC๋Š” ๋ชฉ๋ก์˜ ์ธ๋ผ์ธ ์ •๋ ฌ ์—†์ด๋Š” ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ObservableCollection<> ์— ๋ฐ”์ธ๋”ฉํ•˜๋ฉด ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ธ€์Ž„, ์ˆ˜๋™ ๋ฒ„๋ธ” ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Enumerable.OrderBy(TSource, TKey)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์–ด์จŒ๋“  ์ „์ฒด ์ƒˆ๋กœ ๊ณ ์นจ์„ ์œ ๋ฐœํ•˜๋Š” ์ƒˆ๋กœ์šด IEnumerable๋กœ ๋๋‚  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CollectionViewSource๋Š” ๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” XAML ๊ธฐ์ˆ ์˜ ํฐ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—†์œผ๋ฉด ์ •๋ ฌ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ObservableCollection<>๊ณผ ๊ฐ™์€ ๋ชฉ๋ก์„ ์ •๋ ฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋•Œ๋„ ๋ถ€์ž‘์šฉ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. CollectionViewSource๊ฐ€ ์—†์œผ๋ฉด XF์—๋Š” ๋‹ค๋ฅธ XAML ๊ธฐ์ˆ ๊ณผ ํ•จ๊ป˜ ํ‘œ์ค€์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ๋ˆ„๋ฝ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ•„ํ„ฐ๋ง ๋ฐ ๊ทธ๋ฃนํ™”๋Š” ๊ฑด๋“œ๋ฆฌ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค... ์ด๊ฒƒ์ด ์—†์œผ๋ฉด SyncFusion๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ ์ปจํŠธ๋กค์„ ํฌํ•จํ•œ ๋ชจ๋“  XF ์ปจํŠธ๋กค์ด ์ž์ฒด ์ ‘์„ ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๊ธฐ์กด์˜ ํ‘œ์ค€ ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF ์ดํ›„ XAML ์—์ฝ”์‹œ์Šคํ…œ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

์—ฌ๋‹ด์œผ๋กœ, ๋‚ด ์ƒ์‚ฌ๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ •๋ ฌ, ํ•„ํ„ฐ๋ง, ๊ทธ๋ฃนํ™” ๋“ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์••๋ ฅ์„ ์ง€์†์ ์œผ๋กœ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ž์ฒด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์—์„œ ๋ถ€๋ถ„ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Silverlight ๋ฐ WPF์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด Microsoft ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ์™„์ „ํžˆ ๋ฒ—์–ด๋‚œ ๊ณณ์—์„œ SyncFusion ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค๋กœ ์ธํ•ด ์ถฉ๋Œ ๋“ฑ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜์—ฌ ์ด์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

CollectionViewSource๋Š” XAML ๊ธฐ์ˆ  ๊ณต๊ฐ„์˜ ๊ธฐ๋ณธ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

INCC != ์ปฌ๋ ‰์…˜๋ทฐ ์†Œ์Šค

CollectionViewSource ์ž‘์„ฑ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ˆ„๋ฝ๋œ ์œ ์ผํ•œ ๋ถ€๋ถ„์€ ResourceDictionaries์˜ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ฒด๊ฐ€ ์ƒ์†๋œ ๋ฐ”์ธ๋”ฉ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ ์†Œ์Šค์™€ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค ์ค‘ ๋ˆ„๊ตฌ๋„ ํ‘œ์ค€ ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ํ˜ธํ™˜์„ฑ์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? XAML์ด CollectionViewSources์— ๋Œ€ํ•ด ์ทจํ•œ ์ผ๋ฐ˜ ๊ตฌ๋ฌธ๋ฟ์ž…๋‹ˆ๊นŒ?

์–ด๋–ค ๊ทœ๋ชจ์˜ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ObservableCollection<> ์— ๋ฐ”์ธ๋”ฉํ•˜๋ฉด ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ๋ณธ ๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์€ ReadOnly ํ”„๋ก์‹œ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ReactiveList, DynamicData, ๊ทธ๋ฆฌ๊ณ  CollectionViewSource๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ICollectionView์—์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ๋ชฉ๋ก์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์†Œ์Šค ๋ชฉ๋ก์„ ์ฝ๊ธฐ ์ „์šฉ ๋ณด๊ธฐ์— ํˆฌ์˜ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์—…๋ฐ์ดํŠธ๋Š” ๋™๊ธฐํ™”๋˜์ง€๋งŒ ํฐ ์—…๋ฐ์ดํŠธ๋Š” ์žฌ์„ค์ • ๋ฐ ์ƒˆ๋กœ ๊ณ ์นจ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฐ˜์‘ ํŒฌ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด๊ฒƒ์ด ๋น„ ์Šคํƒ€ํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ
https://github.com/RolandPheasant/DynamicData
๋†€๋ž๊ณ  ๋” ํฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ œ์•ˆ ๊ณต๊ฐœ๋ผ๊ณ  ํ‘œ์‹œํ–ˆ๋Š”๋ฐ, ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๊ถ๊ธˆํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@StephaneDelcroix

์ž์‹ ์˜ CollectionViewSource๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํด๋ž˜์Šค์˜ ์–‘์ชฝ์—์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค ์ž์ฒด์—์„œ ์ •๋ ฌ, ํ•„ํ„ฐ๋ง ๋ฐ ๊ทธ๋ฃนํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋ฐฉ์ •์‹์˜ ์ผ๋ถ€์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์€ ์ •๋ ฌ, ํ•„ํ„ฐ๋ง ๋“ฑ์„ ์ง€์‹œํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด WPF ๋ฐ Silverlight์—์„œ DataGrid๋Š” ์ฃผ์–ด์ง„ ์—ด์˜ ํ—ค๋”๋ฅผ ํด๋ฆญํ•  ๋•Œ CollectionViewSource์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—ด์— ์˜ํ•ด ๋ฆฌ์กฐํŠธ๋ฅผ ์ผ์œผํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Xamarin Forms์—๋Š” ํ˜„์žฌ ๊ณต์‹ DataGrid๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DataGrid๊ฐ€ ์—†๋‹ค๋Š” ๋ถ€์ž‘์šฉ์€ SyncFusion๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ์—์„œ ์ž์ฒด DataGrid๋ฅผ ์ž‘์„ฑํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. DataGrid ์ž์ฒด์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํ‘œ์ค€ Microsoft CollectionViewSource์™€ ์ปจํŠธ๋กค์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ •๋ ฌ ๋…ผ๋ฆฌ๋Š” ํ•ด๋‹น ์ปจํŠธ๋กค์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๊ณผ ๊ณต์œ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋ฉด ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. CollectionViewSource์˜ ์ „์ฒด ๋ฒ„์ „์„ ์ž‘์„ฑํ–ˆ๋”๋ผ๋„ ์—ด ํ—ค๋” ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  CollectionViewSource์—์„œ ์ •๋ ฌ ์—ด์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด DataGrid์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Xamarin Forms๋Š” ์ด๋ฅผ ์œ„ํ•ด DataGrid๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ListView ๋ฐ Pickers ๋“ฑ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๊ณผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ ์•ฑ์—์„œ๋Š” ๊ธฐ๋ณธ ์ˆ˜์ค€(์ค‘๊ธ‰ ํด๋ž˜์Šค)์—์„œ CollectionViewSource์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ ์ค‘๊ฐ„ ํด๋ž˜์Šค์— ์ •๋ ฌ ์—ด์„ ์„ค์ •ํ•˜๊ณ  ๊ธฐ๋ณธ ์ˆ˜์ค€ ์ปฌ๋ ‰์…˜๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š” ButtonBehaviors๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฐ ์ธํ”„๋ผ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ XAML ํ”Œ๋žซํผ์—์„œ CollectionViewSource๋Š” ๊ฒฉ๋ฆฌ๋œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” ์ผ๋ จ์˜ ์ปจํŠธ๋กค, ๋™์ž‘, ๋ช…๋ น ๋“ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†์„ฑ โ€‹โ€‹์ด๋ฆ„ ๋ชฉ๋ก(๋ณ„์นญ๋ณ„)์„ ํ‘œ์‹œํ•˜๋Š” Action Sheet๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฉ๋ก์—์„œ ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜๋ฉด CollectionViewSource๊ฐ€ ํ•ด๋‹น ์†์„ฑ๋ณ„๋กœ ์ •๋ ฌ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ณง ๊ตฌํ˜„๋˜์ง€ ์•Š์œผ๋ฉด ์ œ3์ž ์ปจํŠธ๋กค ๋“ฑ์ด ๋” ์ž์ฒด์ ์œผ๋กœ ์ž‘๋™ํ•˜์—ฌ ๊ฐ ์ปจํŠธ๋กค์— ํŠน์ •ํ•œ ํ•ดํ‚น ์ •๋ ฌ/ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์— ์ ์  ๋” ๋งŽ์€ ์ž‘์—…์„ ์Ÿ์•„ ๋ถ“๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๋ชฉ๋ก ํ˜•์‹ ์ปจํŠธ๋กค ๊ฐ„์— ๊ณต์œ ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์žฅ๊ธฐ์ ์œผ๋กœ Xamarin Forms์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํŠน์ • ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๊ตฌํ˜„๋˜์—ˆ์ง€๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ์ปจํŠธ๋กค๊ณผ ๊ณต์œ ๋˜์ง€ ์•Š๋Š” ์ •๋ ฌ ๊ธฐ๋Šฅ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. https://developer.xamarin.com/api/property/System.Windows.Forms.ListView.Sorting /

@PureWeen , ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? CollectionViewSource๋Š” XAML ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ์ „๋ฐ˜์— ๊ฑธ์นœ Microsoft ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋” ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์„ ๋†“์ณค์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ํ˜ธํ™˜์„ฑ์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? XAML์ด CollectionViewSources์— ๋Œ€ํ•ด ์ทจํ•œ ์ผ๋ฐ˜ ๊ตฌ๋ฌธ๋ฟ์ž…๋‹ˆ๊นŒ?

WPF, Silverlight ๋ฐ UWP์—์„œ CollectionViewSource๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ปจํŠธ๋กค์€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ CollectionViewSource์˜ ๊ตฌ๋ฉ์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ํƒ€์‚ฌ ์ปจํŠธ๋กค(์˜ˆ: SfDataGrid)์ด ๋„์ž…๋˜๋ฉด ํ‘œ์ค€ Microsoft XAML ๊ธฐ๋ฐ˜ CollectionViewSource ๊ธฐ๋Šฅ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ •๋ ฌ, ํ•„ํ„ฐ๋ง ๋ฐ ๊ทธ๋ฃนํ™”๊ฐ€ ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ œ3์ž์—๊ฒŒ๋Š” ํ•ญ์ƒ ๊ณ ์œ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@jassmith ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์–˜๋“ค์•„, ์ด๊ฑด ๋„ˆ๋ฌด ํ•„์š”ํ•ด. ํ•„ํ„ฐ๋‚˜ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ๋ก์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ๋กœ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค.
https://forums.xamarin.com/discussion/32481/observablecollection-with-filter

ํ™•์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Xamarin์—์„œ ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋ˆ„๋ฝ๋œ WPF์˜ ๋งค์šฐ ์œ ์šฉํ•œ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ WPF System.Windows.Data.CollectionView ๋˜๋Š” System.ComponentModel.ICollectionView์™€ ์ „ํ˜€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด Xamarin Forms 4.0 CollectionView ์ปจํŠธ๋กค์„ ์–ด๋–ป๊ฒŒ ๋ฐฉํ•ดํ•˜๋‚˜์š”?

์ €๋Š” WPF์— ๋Œ€ํ•œ ์ˆ˜๋…„๊ฐ„์˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ Xamarin Forms๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Xamarin์— CollectionViewSource ๊ตฌํ˜„์ด ์—†๋‹ค๋Š” ์ ์— ๋งค์šฐ ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

CollectionViewSource์™€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์—ฌ๊ธฐ์— ์™”์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ๋ชจ๋ฐ”์ผ ์•ฑ ๋นŒ๋“œ์— ์‚ฌ์šฉํ•  ๊ธฐ์ˆ (์˜ˆ: Xamarin.Forms)์„ ๊ณ ๋ คํ•  ๋•Œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด์žฅ๋œ ์ง€์›์ด ์—†๋Š” ํ•œ, ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ๊ตฌํ˜„์„ ๊ณ ์ˆ˜ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์—†๋‹ค๋ฉด UWP์˜ CollectionViewSource ์—๋„ ๊ธฐ๋ณธ ์ œ๊ณต ์ •๋ ฌ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

WindowsCommunityToolkit ์—๋Š” ๊ทธ๋ฃนํ™” ๋ฐ ์ •๋ ฌ์„ ์ถ”๊ฐ€ํ•˜๋Š” UWP ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

๋‚˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ์ˆ˜ํ–‰๋œ ์ž‘์—…์„ ํ™•์ธํ•˜๊ณ  UWP์—์„œ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ํ‘œ์ค€ ์†”๋ฃจ์…˜์„ ์กฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด UWP ๋ˆ„๋ฝ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ SO ๋…ผ์˜ ๋ฐ ์ผ๋ถ€ ๊ฐœ์„  ์‹œ๋„. .

"์ด๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค"๋Š” ๋ฐ˜์ง€์— ๋‚ด ๊ฐ€์ƒ ๋ชจ์ž๋ฅผ ๋˜์ง€๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์™”์Šต๋‹ˆ๋‹ค. ์ž๋™ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ ๋ฐ ๊ทธ๋ฃนํ™”๋Š” WPF/XAML ํ™˜๊ฒฝ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„์ด๋ฏ€๋กœ ์—ฌ๊ธฐ Xamarin์— ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์™œ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@jbhaywood ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์™„์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ CollectionViewSource์™€ ๊ฐ™์€ ๊ฒƒ์€ ์„น์‹œํ•˜์ง€ ์•Š์•„์„œ Microsoft ์ง์›์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ํšŒ์˜์—์„œ ์ž๋ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Microsoft๋Š” Xamarin.Forms ์ž์ฒด๋ฅผ ์ž์‚ฌ ์ œํ’ˆ์— ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ณ ์ถฉ๋„ ๋Š๋ผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰