【发布时间】:2011-07-13 00:35:41
【问题描述】:
我想创建一些扩展的 Binding-Markup-Extension,它的行为就像普通的 WPF-Binding 一样,但做了更多的事情(使用不同的默认值,可能添加一些行为等)。 代码如下所示:
public class CustomBindingExtension : Binding
{
.. some extra properties and maybe overrides ...
}
包括 XAML-intellisense 在内的一切都可以正常工作,只是我无法让 Resharper 正确解析我的 Binding-Path。 即:使用此代码,我可以 [Strg]+单击“CurrentText”,Resharper 让 vs2010 导航到定义 CurrentText-Property 的代码。
<UserControl x:Name="uc" ...>
<TextBox Text="{Binding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>
但是使用 my 绑定,它在运行时正常工作,我只是在悬停“CurrentText”时得到一个工具提示,告诉我它是一些“MS.Internal.Design.Metadata.ReflectionTypeNode”,而不是通过 [Strg]+Click 导航。
<UserControl x:Name="uc" ...>
<TextBox Text="{util:CustomBinding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>
我尝试了以下方法:
我还查看了原始类 Binding 和 BindingBase,但找不到与我的代码更多的区别。 任何想法在这里应该有什么帮助? 或者这只是对我自己的 MarkupExtensions 无法获得的 Binding-MarkupExtension 的特殊处理?
16.03.2011 更新:也可能是 Resharper 的错误或缺陷,Jetbrains 正在调查该问题:http://youtrack.jetbrains.net/issue/RSRP-230607
10.12.2013 更新:同时,该功能似乎正在运行(使用 R# 7.1.3,可能还有早期版本),我实际上使用了 BindingDecoratorBase 的方法,我非常喜欢它。 如果您的 MarkupExtension 以“Binding”结尾,也许它只有效,但我的有效,所以我很高兴。
【问题讨论】:
-
我什至不知道你能做到这一点。当我尝试它(使用常规绑定)时,我总是会得到使用 CustomBinding 时的行为。为了让它工作,我应该做些什么特别的事情?
-
是的,Ctrl+单击 CurrentText 只会为我选择单词。您确定这不是跳到定义的扩展吗?也许是生产力电动工具?
-
好的,我不确定,似乎是 Resharper 的一个功能。当然,它仅在您绑定到诸如 ViewModel 而不是 DataContext 之类的类型安全的东西时才有效。
-
这是 Resharper 的一个功能,我会在问题中澄清这一点。
标签: wpf visual-studio-2010 xaml resharper markup-extensions