IT Share you

Resharper가 CustomBinding MarkupExtension에 대한 경로를 확인하는 방법

shareyou 2020. 12. 5. 10:57
반응형

Resharper가 CustomBinding MarkupExtension에 대한 경로를 확인하는 방법


일반 WPF 바인딩처럼 동작하지만 더 많은 작업을 수행하는 확장 된 Binding-Markup-Extension을 만들고 싶습니다 (다른 기본값을 사용하거나 일부 동작을 추가하는 등). 코드는 다음과 같습니다.

public class CustomBindingExtension : Binding
{
  .. some extra properties and maybe overrides ...
}

Resharper가 내 Binding-Path를 올바르게 해결할 수 없다는 점을 제외하고는 XAML-intellisense를 포함하여 모두 잘 작동합니다. 즉 :이 코드를 사용하여 'CurrentText'를 [Strg] + 클릭하면 Resharper에서 vs2010이 CurrentText-Property를 정의하는 코드로 이동할 수 있습니다.

<UserControl x:Name="uc" ...>
  <TextBox Text="{Binding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>

그러나 사용하여 나의 이 일부 'MS.Internal.Design.Metadata.ReflectionTypeNode', 그리고를 통해 어떤 네비게이션입니다 말해 'CurrentText'를 유혹 할 때 런타임에 제대로 작동하는, 바인딩, 난 그냥 풍선 도움말을 얻을 [STRG는] +를 클릭합니다.

<UserControl x:Name="uc" ...>
  <TextBox Text="{util:CustomBinding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>

다음과 같은 시도를했습니다.

  • 바인딩에서 파생
  • BindingDecoratorBase 에서 파생
  • CustomBinding-class에 대한 'Extension'접미사를 제외합니다.
  • Markup-Extension을 별도의 어셈블리에 넣습니다.
  • ConstructorArgumentAttribute 사용
  • Path-Property에 대한 문자열 유형 및 PropertyPath 유형의 속성
  • 또한 원래 클래스 인 Binding 및 BindingBase를 살펴 보았지만 내 코드에서 더 이상 차이점을 찾을 수 없었습니다. 여기에 도움이 될 아이디어가 있습니까? 아니면 내 자신의 MarkupExtensions에 대해 얻을 수없는 Binding-MarkupExtension의 특수 처리 일 뿐입니 까?

    2011 년 3 월 16 일 업데이트 : Resharper의 버그 또는 결함 일 수도 있습니다. Jetbrains는 문제를 조사하고 있습니다. http://youtrack.jetbrains.net/issue/RSRP-230607

    업데이트 10.12.2013 : 한편, 기능은 작동하는 것 같습니다 (R # 7.1.3, 아마도 이전 버전에서도 가능), 저는 실제로 BindingDecoratorBase와 함께 접근 방식을 사용하고 있습니다. MarkupExtension이 'Binding'으로 끝나는 경우에만 작동 할 수 있지만 내 것이 작동하므로 기쁩니다.


    실제로 현재 버전의 R #에서는 불가능하며 안타깝게도 향후 R # 6.1 릴리스의 기능이 여전히 누락되어 있습니다.

    이 기능은 많은 인프라 변경 이 필요 하지만 목록에 있으며 확실히 R # 7에서 구현 될 것입니다. like [CustomBindingMarkup]and [BindingPath]( path생성자 매개 변수 및 Path속성의 경우) 속성이 도입 될 것입니다.

    불편을 드려 죄송합니다.


    올바른 네임 스페이스를 사용하여 사용자 지정 Markup-Extension에 액세스해야합니다.

    <UserControl x:Name="uc" ...
    xmlns:ext="clr-ns:YourProjectNamespace">
      <TextBox Text="{ext:CustomBinding ViewModel.CurrentText, ElementName=uc}" />
    </UserControl>
    

    다음 은 사용자 지정 마크 업 확장을 만드는 방법에 대한 좋은 기사입니다.


    R #을 속이는 한 가지 방법은 이름을 Binding으로 지정하는 것입니다.

    public class Binding : MarkupExtension
    {
        public Binding()
        {
        }
    
        public Binding(string path)
        {
            Path = path;
        }
    
        public string Path { get; set; }
    
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return 5;
        }
    }
    

    그런 다음 R #을 사용한 표준 바인딩과 동일하게 작동합니다.

    <TextBlock Text="{custom:Binding SomeProp}" />
    

    참고 URL : https://stackoverflow.com/questions/5265281/how-to-make-resharper-resolve-path-for-custombinding-markupextension

    반응형