Я изучил бы Objective C и изучил бы столько C, сколько Вам нужно, как Вы продвигаетесь.
области C, от которого Вы не будете зависеть очень:
ViewModel, без всяких сомнений. Предотвращение кода программной части - конечная цель шаблона - фактически, ViewModel сам является кодом представления.
например: для разных представлений может потребоваться различная фильтрация
Различные представления должны иметь разные модели представления. ViewModel - это в основном (несколько более) объектно-ориентированный подход к файлам кода программной части.
Что касается CollectionView: вы можете определить CollectionViewSource в представлении XAML, а затем связать его свойства сортировки и фильтрации с ViewModel. Это должно держать контроль в ViewModel и CollectionView, но я считаю, что это чрезмерная инженерия.
Вы можете проверить эту статью в моем блоге, где я использую методологию MVVM для фильтрации коллекции элементов. Я думаю, что это определенно ответственность класса VM.
Нет правильного технического ответа. Цель шаблона состоит в том, чтобы разделить проблемы функциональности и эстетики на том основании, что художественный дизайнер не понимает, как реализовать функциональность, а пользовательские интерфейсы сложно тестировать.
Но если вы можете параметризовать фильтрацию на что-то очень простое, например, текстовое свойство под названием «Регион», которое может быть установлено на «Европа», «Северная Америка», «Aisa» и т. д., что довольно легко понять и которое можно независимо тестировать. Это позволяет вам немного контролировать функциональность (в очень ограниченном смысле) в представлении. Если это имеет значение для ваших усилий, сделайте это. Если нет, не делайте этого.
И в конечном итоге, если попытка применить этот шаблон заставляет вас задуматься о философских различиях,
Я думаю, что такая функция фильтрации принадлежит модели просмотра. Помните, вы хотите сохранить как можно больше тестируемого кода в модели просмотра (которую вы будете тестировать, не так ли?). И наоборот, вы захотите, чтобы представление было компактным и средним.
Функциональность фильтрации является общей и не привязана к представлению как таковому. Но если для другого представления потребуется другая фильтрация, вы должны увидеть это как дополнительную функциональность, поддерживаемую моделью представления.
Я согласен с вами, что это Беспокоит то, что есть утечка технологии View в VieModel. В аналогичном ключе я использую объект RelayCommand в своих ViewModels, который использует System.Windows.Input.
Тем не менее, по всем указанным здесь причинам, я думаю, что ViewModel является правильным выбором дизайна для этого носителя (wpf / silverlight ), хотя и не совсем идеально.