【问题标题】:Fastest way to create a Converter in Visual Studio在 Visual Studio 中创建转换器的最快方法
【发布时间】:2011-04-30 20:11:19
【问题描述】:

当使用绑定转换器很常见时.. 我总是发现自己

  • 右键单击正确的文件夹
  • 点击添加
  • 点击新建项目
  • (有时)选择左侧的代码
  • 选择类和“添加”(有时当我赶时间时,可以创建一个 AboutBox 代替:-( )
  • 复制旧的 IValueConverter 或 IMultiValueConverter
  • 更改命名空间和类名
  • 删除旧代码

然后我终于可以开始实现我的新转换器了。

在此之后,我还必须将此命名空间添加到 xaml 文件并将其添加到资源中,然后才能引用它。我已经这样做了一百万次了,这可能是最慢的方法,所以我的问题是..

在 Visual Studio 中创建转换器的最快方法是什么?

【问题讨论】:

  • 最多需要 45 秒...您创建了这么多转换器吗?

标签: c# wpf visual-studio silverlight


【解决方案1】:

你当然可以在这部分节省时间:

  • 复制旧的 IValueConverter 或 IMultiValueConverter
  • 更改命名空间和类名
  • 删除旧代码

改为这样做:

  • 创建一个新类(例如FooConverter
  • 只需添加: IValueConverter 即可实现IValueConverter
  • 插入符号仍然在IValueConverter 上,按Ctrl + . 打开智能标签菜单
  • 从智能标签菜单中选择“Implement interface IValueConverter”(应该是第一个选项)

Visual Studio 会自动创建必要的方法存根,您只需要编写实现即可。

【讨论】:

  • 感谢您的回答!如果我目前没有任何其他转换器可用,这实际上是我的第二种方法。我一直发现复制/粘贴方式更快,因为除非包含命名空间,否则工作室不会自动完成 IValueConverter。但我想你是对的,这种方式可能更快:-)你真的对这个答案投了反对票吗?我会支持你:)
【解决方案2】:

可能最适合您的资源是 Visual Studio 模板。您可以创建自己的,因此您可以右键单击/创建新项目/转换器,它将存根您手动执行的所有操作。

如果您确实创建了类似的东西,它可能是一个很棒的小项目,可以通过 codeplex 或类似的东西与社区分享。

Creating Item Templates in Visual Studio

【讨论】:

  • 我会支持这个。我为当前项目中的行为、转换器和其他一些自定义类执行此操作。节省的时间并不像不破坏我的工作流程那么重要。帮助我在项目中保持头脑清醒。
  • 感谢您的回答!我要试试 Visual Studio 模板!我也赞同 Raumornie 的评论“帮助我在项目中保持头脑清醒”。
【解决方案3】:

我喜欢这个问题和价值转换器,所以我有一点可能对你没有帮助,Meleak,但希望那些没有如此严格的风格指南的人可以将多个转换器放在一个文件中:A sn- p 为值转换器存根创建代码。

<?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>

在 Visual Studio 的 sn-p 文件夹中将其保存为 vc.snippet(或扩展名为 snippet 的其他名称)(对于 x64 上的 VS2010,应为:"%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#")。你也可以通过Tools -&gt; Code Snippet Manager...导入sn-p。

要使用它,只需键入vc 并按两次制表符,然后在两个类字段中制表符以填写它们。

您可能需要为 ValueConversion-attribute 和 IValueConverter 添加两个引用。

上面的 sn-p 相当冗长,所以这里将是一个更轻的版本(关键字是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>

【讨论】:

  • 非常酷 :) 我一定要试试这个!
【解决方案4】:

将所有转换器类保存在一个文件中(即:Converters.cs),然后当您需要添加一个时,您可以执行与您已经在执行但不必添加的相同的复制/粘贴一个新的项目,重新命名空间,添加一个新的命名空间,等等。

至少,我就是这么做的……

【讨论】:

  • 对了,你和that guy有关系吗? ;)
  • 我不同意 - 复制/粘贴通常不是大多数人的正确解决方案。我们这些不粗心的人通常能够复制/粘贴而不会出错。
  • 我工作的风格指南对 1 个类/文件非常严格,所以这不是一个选项。还是谢谢!
【解决方案5】:

我在 Visual Studio 2010 中添加了一个值转换器项模板: 从项目上下文菜单中,添加...新建项目...在线模板文件夹...Silverlight 文件夹...值转换器。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2014-07-11
    • 2011-04-21
    • 2011-11-17
    • 1970-01-01
    • 2018-10-20
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多