Самый быстрый способ создать конвертер в Visual Studio - PullRequest
4 голосов
/ 26 октября 2010

При работе с Binding конвертеры довольно распространены .. Я всегда нахожу себя

  • Щелкните правой кнопкой мыши нужную папку
  • Нажмите Добавить
  • Нажмите Новый элемент
  • (Иногда) Выберите код слева
  • Выберите Класс и «Добавить» (а иногда, когда я спешу, вместо этого создайте AboutBox :-()
  • Скопируйте старый IValueConverter или IMultiValueConverter
  • Измените пространство имен и имя класса
  • Удалите старый код

, и тогда я наконец смогу приступить к реализации моего нового конвертера.

После этого мне также нужно добавить это пространство имен в файл xaml и добавить его в ресурсы, прежде чем я смогу сослаться на него. Я делал это миллион раз, и это, вероятно, самый медленный способ сделать это.у меня вопрос ..

Какой самый быстрый способ создать конвертер в Visual Studio?

Ответы [ 5 ]

11 голосов
/ 26 октября 2010

Вы, безусловно, можете сэкономить время на этой части:

  • Скопируйте старый IValueConverter или IMultiValueConverter
  • Измените пространство имен и имя класса
  • Удалитьстарый код

Вместо этого сделайте так:

  • Создайте новый класс (например, FooConverter)
  • Сделайте его реализующимIValueConverter просто добавив : IValueConverter
  • Когда курсор вставлен в IValueConverter, нажмите Ctrl + . , чтобы открыть меню смарт-тега
  • Выберите «Интерфейс реализации IValueConverter» (должен быть первым вариантом) из меню смарт-тегов

Visual Studio автоматически создаст необходимые заглушки метода, вам просто нужно написать реализацию.

9 голосов
/ 26 октября 2010

Наверное, лучший ресурс для вас - шаблоны Visual Studio. Вы можете создать свой собственный, и вы можете щелкнуть правой кнопкой мыши / создать новый элемент / конвертер, который будет заглушить все, что вы делаете вручную.

Если вы создадите что-то подобное, вероятно, это будет отличный маленький проект, которым можно поделиться с сообществом через codeplex или что-то в этом роде.

Создание шаблонов элементов в Visual Studio

2 голосов
/ 14 февраля 2011

Мне нравятся конвертеры вопросов и значений, поэтому я хочу внести небольшой вклад, который, возможно, не поможет вам, Мелик, но надеюсь, что те, у кого нет таких строгих правил стиля и, таким образом, могут поместить несколько конвертеров в один файл: фрагмент, который создает код для заглушки конвертера значений.

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Value Converter Stub</Title>
            <Shortcut>vc</Shortcut>
            <Description>Code snippet for a value converter stub</Description>
            <Author>H.B.</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>from</ID>
                    <ToolTip>The source type.</ToolTip>
                    <Default>object</Default>
                </Literal>
                <Literal>
                    <ID>to</ID>
                    <ToolTip>The target type.</ToolTip>
                    <Default>object</Default>
                </Literal>
                <Literal>
                    <ID>convertername</ID>
                    <ToolTip>Name of the converter.</ToolTip>
                    <Default>My</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[[ValueConversion(typeof($from$), typeof($to$))]
public class $convertername$Converter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $from$ input = ($from$)value;
        $to$ output;

        throw new NotImplementedException();

        return output;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $to$ input = ($to$)value;
        $from$ output;

        throw new NotImplementedException();

        return output;
    }
}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Сохраните это как vc.snippet (или что-то еще с расширением snippet) в папке фрагмента Visual Studio (для VS2010 на x64 это будет: "%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#"). Вы также можете импортировать фрагмент через Tools -> Code Snippet Manager....

Чтобы использовать его, просто наберите vc и дважды нажмите на вкладку, затем нажмите на два поля класса, чтобы заполнить их.

Может потребоваться добавить две ссылки для ValueConversion -атрибута и IValueConverter.

Приведенный выше фрагмент довольно многословен, поэтому здесь будет более легкая версия (ключевое слово vcl), в которой пропущены кадры атрибута и метода и имеется только одно редактируемое поле, которое непосредственно задает полное имя класса:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Value Converter Stub (Light)</Title>
            <Shortcut>vcl</Shortcut>
            <Description>Code snippet for a light value converter stub</Description>
            <Author>H.B.</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
            <Literal>
                <ID>convertername</ID>
                <ToolTip>Name of the converter.</ToolTip>
                <Default>My</Default>
            </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[public class $convertername$Converter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        $end$
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>
0 голосов
/ 27 октября 2010

Я добавил шаблон элемента конвертера значений в Visual Studio 2010: В контекстном меню проекта добавьте ... Новый элемент ... Папка сетевых шаблонов ... Папка Silverlight ... Конвертер значений.

0 голосов
/ 26 октября 2010

Храните все ваши классы конвертера в одном файле (например: Converters.cs), тогда, когда вам нужно добавить один, вы можете сделать то же самое копирование / вставку, которое вы уже делаете, но вам не нужно добавлятьновый элемент, переименование пространства имен, добавление нового пространства имен и т. д.

По крайней мере, это то, что я делаю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...