MFractor — это инструмент для повышения производительности разработчиков, предназначенный для Xamarin Studio на Mac, который помогает намного быстрее писать код и XAML для приложений Xamarin Forms, а также оперативно обнаруживать ошибки. Его можно считать почти полным аналогом ReSharper, однако, он предназначен именно для Xamarin Forms. Вы будете получать советы и подходящие команды в реальном времени при написании приложения в Xamarin Studio. Эта помощь подразделяется по четырем типам: рефакторинг, генерирование, систематизация и устранение ошибок.
Настройка и установка
Перейдите в MFractor и загрузите последнюю версию этого инструмента на Ваш Mac. Откройте Xamarin Studio и перейдите к Add-ins.
Затем перейдите к Install From File и найдите download. Нажмите кнопку Open.
После завершения установки инструмент потребует активации. Сначала закройте диспетчер надстроек (Add-in manager), затем введите свой адрес электронной почты и активируйте его. Теперь все готово к тому, чтобы приступать к работе с MFractor.
Неиспользуемые пространства имен
При первой загрузке XAML-страницы с установленным MFractor будет подчеркнуто значение локального атрибута xmlns. Наведите на него курсор, и вы увидите уведомление. Оно напомнит о том, что Вы не используете префикс.
Его можно удалить, или Mfractor может сделать это за Вас.
К сведению: Любую команду можно выполнить посредством MFractor, щелкнув правой кнопкой мыши или нажав клавиши ALT + Return.
ViewModel
Теперь, прежде чем MFractor станет действительно умным, необходимо убедиться, что страницы подключены к ViewModel, путем либо статического шаблона локатора, либо соглашения о присвоении имен. Сперва давайте создадим ViewModel под названием MainViewModel.cs.
1 2 3 4 | public class MainViewModel { } |
Если вы подключаете ViewModel со статическим шаблоном локатора, создайте класс ViewModelLocator.
1 2 3 4 | public static class ViewModelLocator { public static readonly MainViewModel MainViewModel = new MainViewModel(); } |
Затем установите BindingContext на странице.
1 | BindingContext="{x:Static local:ViewModelLocator.MainViewModel}" |
Есть и другой способ, являющейся более предпочтительным, который состоит в том, чтобы использовать соглашения о присвоении имен. Это и проще и позволяет работать при использовании других платформ MVVM. Если префикс страницы и ViewModel совпадают, предполагается, что они подключены. Например, MainPage будет подключаться к MainViewModel.
Значение свойства
Теперь можно изменить метку для привязки к свойству во ViewModel, вызвав TestValue.
1 | <Label Text="{Binding TestValue}" /> |
При наведении указателя мыши на TestValue Вы увидите, что это свойство не существует во ViewModel.
Чтобы создать свойство, щелкните правой кнопкой мыши или нажмите Alt + Return, а затем нажмите «генерировать имя свойства» — Generate property name TestValue в MainViewModel.
Теперь Вы перейдете к ViewModel, где можно согласиться с тем, чтобы это свойство было размещено. Затем будет создано свойство, как показано ниже.
1 2 3 4 | public class MainViewModel { public string TestValue { get; set; } } |
Конвертеры
MFractor даже умеет обнаруживать то, что свойство не совпадает с типом, к которому оно привязано, а также может находить и понимать конвертеры. Допустим, мы привязали IsVisible к одному и тому же свойству.
1 | <Label Text="{Binding TestValue}" IsVisible="{Binding TestValue}" /> |
В этом случае появится вот такая подсказка: Для решения этой проблемы необходимо создать конвертер.
Чтобы добавить правильную поддержку конвертеров, необходимо сначала добавить маленький атрибут. Добавьте следующий код в проект.
1 2 3 4 5 6 7 8 9 10 11 12 13 | [ValueConversion(typeof(string), typeof(bool))] public class TextToBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return !string.IsNullOrEmpty((string)value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } |
Затем создайте конвертер — TextToBoolConverter. Единственное отличие здесь состоит в том, что для определения преобразования типа необходимо добавить атрибут в верхнюю часть класса.
1 2 3 4 5 6 7 8 9 | [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class ValueConversionAttribute : Attribute { public ValueConversionAttribute(Type input, Type output) { } public Type ParameterType { get; set; } } |
Затем добавьте преобразователь на страницу и подключите преобразователь к привязке IsVisible.
1 2 3 4 5 6 7 | <ContentPage.Resources> <ResourceDictionary> <local:TextToBoolConverter x:Key="TextToBoolConverter" /> </ResourceDictionary> </ContentPage.Resources> <Label Text="{Binding TestValue}" IsVisible="{Binding TestValue, Converter={StaticResource TextToBoolConverter}}" /> |
На этот раз предупреждение возникать не будет. Если изменить атрибут ValueConversion, чтобы возвращался другой тип, тогда, в этом случае, будет выдаваться предупреждение.
Дополнительная информация
В этой статье я только слегка прошелся по основным особенностям MFractor, и здесь осталось еще много неизученных нами возможностей и функций. Ознакомьтесь с документами, где описывается все, что может быть сделано с помощью данного инструмента, или посмотрите пошаговое видеоруководство Мэтью Роббинса на Channel9 с Джеймсом Монтемагно под названием MFractor – невероятный инструмент для Xamarin.
Автор: Adam Pedley
Источник: XamarinHelp.com
Написать ответ