2016-11-23 4 views
0

원본 항목 (A)의 실시간 컬렉션이 주어지면 변환 된 항목 (B)의 모음을 제공하는 것을 목표로하는 ConvertingCollection을 구현합니다. 콜렉션 B는 콜렉션 A에서 발생하는 모든 변경 사항을 반영합니다. MVVM에서 모델 컬렉션이있는 ViewModel 콜렉션으로 사용하는 것이 목표이지만 많은 다른 상황에서 사용할 수 있다고 생각합니다.ivalueconverter 대 system.converter 대 delegate

이 클래스는 사용자가 유형 A에서 유형 B로 객체를 변환 할 수있는 방법을 제공해야합니다. 진행 방법은 여러 가지가 있지만 가장 좋은 접근 방식을 결정할 때 그 차이점을 충분히 알지 못합니다 :

  • 내가 WPF 관련 될 것 같은 IValueConverter 요구할 수 있습니다. 이제 다른 곳에서는 사용하지 못하지만 혼란 스러울 수 있습니다. 제 클래스는 WPF 컨텍스트에서 처음 사용 되기는했지만, 다른 많은 컨텍스트에 적용하기에 충분히 일반적입니다. 또한 IValueConverter은 객체에서 객체로 변환됩니다. 즉, 다운 스트림을 캐스트하고 빌드시 충돌이 발생하지 않습니다.

  • 나는 System.Converter을 선택할 수 있습니다. 이것은 async의 사용을 허용하고, 더 유쾌한, 나는 특정한 유형을 요구할 수있다. 또한, WPF와 관련없는 사람들의 마음에서, 내가 아는 한.

  • 마지막으로 TypeIn => TypeOut을 수행하는 대리인과 함께 갈 수 있습니다. 인스턴스화되고 강력하게 형식화 된 클래스가 없으며 사용자는 IValueConverter, Converter 또는 사용자 지정 함수를 사용하여 대리자를 구현할 수 있습니다.

지금, 나는 모든 단지 대표와 함께 처리 할 수있는 경우 ConverterIValueConverter이 존재하는 이유를 모르겠어요. 그래서 저는 거기에 뭔가 빠져있는 것 같아요.

아무도 도와 줄 수 있습니까? 미리 감사드립니다. 감사합니다.

답변

0

가장 좋은 방법 나를에 따라 :

  • 는 사용자에 의해 IValueConverter 또는 Converter을 사용할지 여부를 결정하자 두 가지 가능성을 모두 제공하는 클래스를 구현합니다.
  • 람다 표현식은 사용자 측에서 쉽게 위임 구현을 제공하기 위해 사용되기 때문에 람다가 범위를 벗어났습니다. 즉, ConvertingCollection은 매개 변수로 대리자가 필요하며 이는 Converter이 이미 있음을 나타냅니다.
    • 그것은 사용자를 강제 만 ConvertingCollection의 사용의 유일한 맥락에서 어디서나없이 적용 할 수있는 변환 될 수있다 제공하기 위해 다음과 같은 이유로
    • 마지막으로, 아이디어는 암시 적 변환이 유지되지 사용 때때로
    • 암시 적 변환이 적용되는 경우에서, 문제가 람다 식 더 복잡 ConvertingCollection의 구현 (암시 적 변환이 2 개 유형 A와 B 사이에 존재하는지 확인)을한다
    • 에서 사용하기 쉽고, 그리고 나는 이것을 너무 게으르다. 좋습니다, 이것이 첫 번째 이유 일지 모르지만 다른 두 가지는 여전히 유효합니다. :

난이 도움이되기를 바랍니다.

0

나는 모든 껄끄 러운 세부 사항을 모르지만, implicit 연산자도 사용할 수 있습니다. 이 초록 각각의 유형으로 변환하고 모두가 절대적으로 사소한 실제 인스턴스 변환을 작성하게 :

A myA = new A(); 
//implicit conversion happens here 
B myB = myA; 

class A 
{ 
    public static implicit operator A(B b) 
    { 
     //TODO - Convert b to a new A 
     return new A(); 
    } 
} 

class B 
{ 
    public static implicit operator B(A a) 
    { 
     //TODO - Convert a to a new B 
     return new B(); 
    } 
} 
+0

좋은 지적으로서, 나는이 옵션에 대해 생각하지 않았습니다. 그럼에도 불구하고 이는 전환이 내 수업을 사용할 때뿐만 아니라 모든 사용자의 프로젝트에 적용된다는 것을 의미합니다 ... 주 메시지를 편집하여 컨텍스트에 대해 자세히 알려줍니다. –