기본 컬렉션 편집기 및/또는 사용자 정의 Uieditor를 부동산에 대한 세트 액세서로 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1209452

문제

프로그램의 기본 객체에 속하는 사용자 정의 클래스가있는 응용 프로그램에 대한 플러그인을 작성하고 있습니다. API를 사용하면 기본 파일의 개체와 직접 키어 문자열을 읽고 쓸 수 있습니다. 따라서 각 속성의 Get and Set Accessor에서 개인 필드를 읽고 쓰고 글을 읽고 프로그램의 기본 객체를 오가는 사용자 문자열을 읽고 쓰고 있습니다.

사용자는 PropertyGrid 컨트롤을 통해 이러한 속성에 액세스합니다. 지금까지 이것은 모두 간단한 속성으로 잘 작동합니다. 지금은 사용자 정의 컬렉션을 저장해야합니다 (플로어 컬렉션사용자 정의 객체 유형 (바닥).

그래서 나는 사용을 사용하여 속성을 설정합니다 xmlserializer. Get Accessor는 기본 객체에서 사용자 문자열을 읽은 다음 문자열이 플로어 컬렉션 인스턴스로 사형화됩니다. 세트 액세서는 플로어 컬렉션, 및 사용자 문자열로 직렬화합니다.

내 재산은 다음과 같습니다.

public FloorCollection Floors
{
    get 
    {
        string oldString = this.GetBaseObjUserString("CPFloors");
        if (oldString == null) return null;

        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringReader strReader = new StringReader(oldString);

        FloorCollection newCollection =                 
        (FloorCollection)serializer.Deserialize(strReader);
        return newCollection;
    }

    set 
    {
        FloorCollection newCol = value;

        if (newCol == null) return;

        //serializes new collection
        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringWriter sw = new StringWriter();

        serializer.Serialize(sw, newCol);

        string newString = sw.ToString();

        this.SetBaseObjUserString("CPFloors", newString);
    }
}

이 컬렉션 속성을 열 수 있습니다 PropertGrid 기본 수집 편집기에서. 그러나 Default Collection 편집기는 Get Accessor가 제공 한 참조에서 컬렉션을 편집 한 다음 Set Accessor에게 호출하여 객체에 다시 저장합니다. 따라서 기본 편집기에서 컬렉션을 편집 할 수 있지만 편집기를 닫고 다시 열면 세트 액세서가 기본 객체의 사용자 문자열로 컬렉션을 직렬화하도록 호출되지 않기 때문에 컬렉션이 변경되지 않았습니다.

기본 수집 편집기를 수정하여 속성의 세트 액세서를 호출 할 수 있습니까? 사용자 정의를 설정하면 uitypeeditor 부동산이 부동산 세트 액세서를 사용하여 속성에 다시 저장할 수있는 방법이 있습니까? 아니면 컬렉션 속성에 액세스하는 코드를 강제로 강제로하는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

나는 XML 시리얼 라이저가 set 컬렉션의 액세서. 대신, 그것은 단지 수집 인스턴스의 추가 메소드를 호출합니다. get 액세서.

컬렉션 유형이 추가 및 제거 메소드를 무시하고 컬렉션을 수정 한 다음 수정 된 컬렉션을 사용자 속성으로 다시 직렬화해야한다고 생각합니다.

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