Общие шаблоны и способы в Xamarin.MacCommon patterns and idioms in Xamarin.Mac

На протяжении всего API Apple, предоставляемых через C# некоторые стили и шаблоны отобразились снова и снова.Throughout the Apple APIs exposed via C#, certain idioms and patterns come up over and over again. Если у вас есть опыт программирования с помощью Xamarin.iOS, они могут быть вам знакомы.If you have experience with programming with Xamarin.iOS, these may look familiar. Документация будет часто ссылаться на эти шаблоны и идиомы несколько раз, поэтому наличие основательного понимания их поможет вам разобраться в документации, которую вы найдете.Documentation will often refer to these patterns and idioms repeatedly, so having a solid understanding of them will help you make sense of the documentation you find.

MVC - Model View ControllerMVC - Model View Controller

Model View Controller или MVC для краткости, — это очень распространенный шаблон, прослеживается по всей Cocoa.Model View Controller, or MVC for short, is a very common pattern found throughout Cocoa. Подробное рассмотрение выходит за рамки данного документа, но вкратце это способ структурирования приложение в виде компонентов:A detailed discussion is beyond the scope of this document, but in brief it is a way of structuring your application into components:

  • Модель объекты представляют базовых данных, для просмотра и управления (например, адреса в адресной книге)Model objects represent the underlying data being viewed and manipulated (Like addresses in an address book)
  • Представление объектов обрабатывать Рисование данного объекта на экране и обработка взаимодействия с пользователем (текстовое поле для отображения адреса на экране)View objects handle the drawing of a given object on screen and handling user interaction (A text field showing the address on screen)
  • Контроллер объектов управляют взаимодействием между моделью и визуализацией.Controller objects handle the interaction between the Model and View. Они отправьте изменения модели «вверх», чтобы обновить представление и свалить «» изменения в представлении при пользователям вносить изменения в пользовательском Интерфейсе.They push Model changes "up" to update the View and push "down" changes from the View when users make changes in the UI.

Если вы знакомы с MVVM (Model View ViewModel) от других библиотек, таких как WPF, контроллер выполняет аналогичную ViewModel, но часто более тесно привязан к определенным элементам пользовательского интерфейса.If you are familiar with MVVM (Model View ViewModel) from other libraries such as WPF, the Controller acts similar to the ViewModel but is often more closely bound to the specific UI elements.

Дополнительные сведения можно найти здесь:More details can be found here:

Источник данных, делегировать, создание подклассаData source / delegate / subclassing

Другой очень распространенный шаблон в Cocoa имеет дело с предоставление данных к элементам пользовательского интерфейса и реагирует на действия пользователя.Another very common pattern in Cocoa deals with providing data to UI elements and reacting to user interactions. С помощью NSTableView в качестве примера необходимо каким-то образом предоставить данные для каждой строки, задать некоторые элементы пользовательского интерфейса, представляющий эту строку, как некоторые набор поведений в ответ на взаимодействие с пользователем и возможно некоторую часть настройки.Using NSTableView as an example, you need to somehow provide the data for each row, some set of UI elements that represent that row, some set of behaviors to react to user interactions, and possibly some amount of customization. Шаблоны данных источника и делегат позволяют обрабатывать большинство вариантов не прибегая к использованию для создания подклассов NSTableView самостоятельно.The data source and delegate patterns let you handle most cases without having to resort to subclassing NSTableView yourself.

  • DataSource Свойству назначается экземпляр пользовательскому подклассу NSTableViewDataSource который вызывается для заполнения таблицы с данными (с помощью GetRowCount и GetObjectValue).The DataSource property is assigned an instance of a custom subclass of NSTableViewDataSource which is called to populate the table with data (via GetRowCount and GetObjectValue).

  • Delegate Свойству назначается экземпляр пользовательскому подклассу NSTableViewDelegate для заданной модели объекта, который предоставляет представление (через GetViewForItem) и обрабатывает взаимодействие пользовательского интерфейса (через DidClickTableColumn, MouseDownInHeaderOfTableColumnи т. д).The Delegate property is assigned an instance of a custom subclass of NSTableViewDelegate which provides the view for a given model object (via GetViewForItem) and handles UI interactions (via DidClickTableColumn, MouseDownInHeaderOfTableColumn, etc).

В некоторых случаях необходимо настроить элемент управления в виде за пределами обработчики в делегат или источник данных и подкласс представлении вы можете напрямую.In some cases, you’ll want to customize a control in a way beyond the hooks given in the delegate or data source and you can subclass the view directly. Будьте внимательны, тем не менее, во многих случаях переопределяя значение по умолчанию поведение затем нужно будет обрабатывать все это поведение (Настройка поведения выбора может потребоваться реализовать все режимы выбора).Be careful however, in many cases overriding default behavior will then require you to handle all of that behavior yourself (customizing selection behavior may require you to implement all of the selection behaviors yourself).

В Xamarin.iOS, некоторые интерфейсы API, такие как UITableView были расширены со свойством, которое реализует делегат и источника данных (UITableViewSource).In Xamarin.iOS, some APIs, such as UITableView have been extended with a property that implements both the delegate and the data source (UITableViewSource). Это ИТ-специалистам устранить распространенные ограничение, один C# класс может иметь только один базовый класс, и наши отображая протоколов выполняется через базовые классы.This it to work around the common limitation that a single C# class can only have one base class, and our surfacing of protocols is done via base classes.

Дополнительные сведения о работе с представлениями таблиц в приложении Xamarin.Mac, см. в разделе наших табличное представление документации.For more information on working with table VIews in a Xamarin.Mac application, please see our Table View documentation.

ПротоколыProtocols

Протоколов в Objective-C можно сравнивать с интерфейсов в C#и во многих случаях используются в таких ситуациях.Protocols in Objective-C can be compared to interfaces in C#, and in many cases are used in similar situations. Например NSTableView приведенном выше примере делегат и источником данных — это фактически протоколы.For example the NSTableView example above, both the delegate and the data source are actually protocols. Xamarin.Mac предоставляет их в качестве базовых классов с помощью виртуальных методов, которые можно переопределить.Xamarin.Mac exposes these as base classes with virtual methods you can override. Основное различие между C# интерфейсов и протоколов в Objective-C является то, что некоторые методы в протокол может необязательно для реализации.The primary difference between C# interfaces and Objective-C protocols is that some methods in a protocol may be optional to implement. Вы получите для просмотра документации и/или определение API, чтобы определить, что является необязательным.You’ll have to look at the documentation and/or definition of an API to determine what is optional.

Дополнительные сведения см. наш делегатов, протоколов и событий документации.More information please see our Delegates, Protocols and Events documentation.