2012-04-21 12 views
1

속성이 많은 사용자 정의 클래스가 있고이 클래스의 인스턴스를 만들 때 나중에 격리 할 수 ​​있도록 격리 된 저장소에 추가합니다. 다른 하나를 저장하려고 시도하면 저장됩니다.이 예외가 발생합니다.클래스의 인스턴스를 ApplicationSettings에 저장할 때 예외가 발생합니다.

데이터 계약 이름이 SolidColorBrush(http://schemas.datacontract.org/2004/07/System.Windows.Media)System.Windows.Media.SolidColorBrush은 필요하지 않습니다. 예를 들어, KnownTypeAttribute 속성을 사용하거나 DataContractSerializer에 전달 된 알려진 유형 목록에 추가하여 알려진 유형 목록에 정적으로 알려지지 않은 유형을 추가하십시오.

내 속성 중 하나가 Brush이지만 초기에이 속성을 설정하지 않았으므로 두 번째 인스턴스를 저장할 때 예외가 발생하는 이유는 무엇입니까?

어떤 도움을

+0

코드를 제공해 주시겠습니까? 어쨌든,이 링크는 당신을 도울 수 있습니다. (http://blogs.msdn.com/b/youssefm/archive/2009/04/21/understanding-known-types.aspx) –

답변

3

당신이합니다 (IsolatedStorageSettings 클래스를 사용하여) 격리 된 저장소에 저장할 모든 객체가 DataContractSerializer를 사용하여 직렬화 가능합니다 화려한 감사합니다 :) 것이다.

SolidColorBrush (해당되는 경우 Brush)은 직렬화가 가능한 마켓이 아니므로 여기에서 문제가됩니다!

해결하려면 브러시 색상을 실제 브러시 개체 대신 저장 한 다음 검색하여 새로운 SolicColorBrush 개체를 만드는 것이 좋습니다.

+1

나는 어려운 방법을 배웠습니다. UI 관련 항목 *을 UI 항목으로 serialize하지 마십시오. * 대신 자신의 중립적 인 데이터 구조로 변환하여 저장하십시오. UI를 변경할 때 복잡해지고 직렬화 된 데이터가 오래된 것입니다. . – slugster

+0

감사합니다 :) 내 유일한 문제는 내가 브러시 속성을 가지고있는 이유는 내가 개인 목록 상자 항목의 색상을 설정하는 방법을 모르기 때문에 저장 한이 클래스의 모든 인스턴스를 표시하는 목록 상자를 가지고 있기 때문입니다 foreground 속성을 내 클래스 인스턴스의 color 속성에 바인딩하지 않습니다. 이 효과를 얻을 수있는 다른 방법을 알고 있습니까? – DomAyre

+0

Binding을 사용하는 경우 Color를 SolidColorBrush로 변환하는 변환기를 만들 수 있습니다! [Cimbalino Windows Phone Toolkit] (https://github.com/Cimbalino/Cimbalino-Phone-Toolkit)에는 프로젝트에 대한 참조를 추가하거나 변환기 [여기] (https : // github. co.kr/Cimbalino/Cimbalino-Phone-Toolkit/blob/master/src/Cimbalino.Phone.Toolkit/Converters/ColorToBrushConverter.cs)! –

관련 문제