문제

복합 응용 프로그램 라이브러리를 사용하여 .NET3.5, WPF 응용 프로그램을 작성하고 있습니다. 응용 프로그램은 여러 모듈로 나뉩니다.

인프라 모듈에서 NetworkNode 객체를 정의했습니다. 네트워크 모듈은 NetworkNodes 모음을 관리하고 XmlSerializer를 사용 하여이 컬렉션을 저장/로드합니다. 지금까지 모든 것이 작동합니다.

그러나 나는 다른 모듈, 즉 nodemodule이 있습니다. 네트워크 모듈에서 네트워크 노드를 선택한 경우 eventAggregator를 사용하여 이벤트가 다른 모듈에 게시됩니다. 이 모듈은 첨부 된 속성을 사용하여 다양한 정보를 네트워크 노드에 첨부 할 수 있습니다.

문제는 NetworkModule이 다른 모듈에 대해 알지 못하므로 이러한 특성이 직렬화되지 않습니다. 객체에 첨부 된 모든 속성을 어떻게 든 목록하고 직렬화 할 수 있습니까? 아니면 개념을 변경하고 첨부 된 속성보다 다른 것을 사용해야합니까?

문안 인사

도움이 되었습니까?

해결책

사용 사용 객체에 정의 된 모든 종속성 속성 (첨부 여부)을 나열 할 수 있습니다. DependencyObject.GetLocalValueEnumerator :

    LocalValueEnumerator propEnumerator = foo.GetLocalValueEnumerator();
    while (propEnumerator.MoveNext())
    {
        Console.WriteLine ("{0} = {1}",
                           propEnumerator.Current.Property.Name,
                           propEnumerator.Current.Value);
    }

그러나 이는 XML 직렬화에 도움이되지 않습니다 (IXMLSerializable을 구현하지 않는 한 고통입니다 ...). 아마 사용해야합니다 XamlWriter 대신 (내가 드류가 말한 것 같아요. XamlSerializer...)

다른 팁

첨부 된 특성은 순수한 CLR 관점에서 볼 수 없기 때문에 XMLSerializer는 이에 대해 알 수있는 방법이 없습니다. "일반"CLR 객체를 직렬화하고 종속성 관에 대한 특별한 지식을 갖기 위해 XamlSerializer 아키텍처를 사용하려면 전환해야합니다.

.NET 4.0을 사용하는 경우 (.NET 3.5에 있지 않다고 생각합니다)

당신은 둘 중 하나를 사용할 수 있습니다 IATTACHEDPROPERTYSTORE 또는 첨부 가능한 프로파인 서비스

참조 예제 #1 : http://blogs.msdn.com/b/bursteg/archive/2009/05/18/xaml-in-net-4-0-attached-properties-iattachedpropertystore-and-tatchablepropertyservices.aspx

또한 일반적으로 첨부 된 속성은 올바르게 정의되어야합니다.

  1. 공개 (또는 일부 시나리오에서 내부 공사)의 재산이 아닌 유형의 속성이어야합니다 (예 : 다른 유형 내부에서 선언되지 않음), T.
  2. 새로운 AttachableMemberIdentifier (T, "MyProperty") 정의
  3. "setmyproperty"및 "getmyproperty"라는 t에 공개 정적 메소드를 제공합니다. 즉, "myProperty"부분은 첨부 블레임에 딜리티체와 일치해야합니다. (XAML 세리어 라이저 스택은 반사를 통해 찾아야하기 때문에 첨부 블리 덴티프의 이름으로 "foo"를 사용할 수없고 "setbar"및 "getbar"라고 부를 수 없습니다. 그러면 이러한 방법은 첨부 가능한 속성 값을 저장하기 위해 첨부 가능한 프로페티 서비스를 활용해야합니다. .

참조 예제 #2 : http://blogs.msdn.com/b/mwinkle/archive/2009/12/07/attachedproperty-part-putting-it-togeth.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top