문제

나는 아직도 실험 DynamicObjects.지금 내가 필요 몇 가지 정보:내가 노력하는 바인드체에서 상속하 DynamicObject WPF DataGrid 지 않는(Silverlight).

나는 어떻게 DataGrid 자동으로 만들고 그 열에서 사용할 수 있는 공공의 속성하는 개체는 일반적으로 생성된 런타임에?하는 것이 가능할까요?

도움이 되었습니까?

해결책

이 없 균일한 방법을 쿼리의 동적물성,일반적으로 그것이 예상되는 당신이 그들을 알고 있습니다.가 DynamicObject, 하고,구현을 덮어쓸 수 있습니다. GetMemberNames 과는 일반적으로 제공합성,그러나 그것은 정말 의미한 디버깅을 위한 요구 사항이 없기 때문에 그것이 제공하는 모든 속성입니다.그렇지 않으면 당신의 자신 DynamicObject 당신은 단지 자신의 방법을 가져올 수 있는 속성을 기반으로 동적인 구현합니다.예를 들어 ExpandoObject 를 쿼리할 수 있도록 모든 속성을 사용하여 IDictionary 인터페이스입니다.

그래서 당신은 방법의 속성을 알려줘야 합 DataGrid.불행하게도 DataGrid,문제로 구현하는 ICustomTypeDescriptor 말 DataGrid 에 대한 귀하의 속성은 DataGrid 얻 TypeDescriptors 형식을 사용하지 않는 인스턴스는 문제에 대한 동적 객체로,그러나의 구현 ITypedList 의 컬렉션에 DynamicObjects 으로 작동 할 것이 매우 작은 잡았다의하지 않는 경우를 구현하는 비일반 IList 인터페이스에서 당신의 컬렉션에서 제거됩니다에 도달하기 전에는 지점 검사 ITypeList.

그래서 요약,구현 컬렉션 ITypedListIList.가 ITypedList null 을 반환한 GetListName 그냥 구현 GetItemProperties(PropertyDescriptor[] listAccessors);시 listAccessors 반환 PropertyDescriptorCollection 의 PropertyDescriptors 에 대한 각 회원에 따라 이름이 최고의 표현하는 동적 객체를 인스턴스에서 당신의 목록(대부분 그냥 첫 번째 목).이 있을 구현하의 서브 클래스 PropertyDescriptor,쉽고 일반적인 방법을 Get/Set 값을 사용하는 것이 오픈 소스 framework Dynamitey

using System;
using System.ComponentModel;
using Dynamitey;
public class DynamicPropertyDescriptor:PropertyDescriptor
{
        public DynamicPropertyDescriptor(string name) : base(name, null)
        {
        }

        public override bool CanResetValue(object component)
        {
            return false;
        }

        public override object GetValue(object component)
        {
           return Dynamic.InvokeGet(component, Name);
        }

        public override void ResetValue(object component)
        {

        }

        public override void SetValue(object component, object value)
        {
            Dynamic.InvokeSet(component, Name, value);
        }

        public override bool ShouldSerializeValue(object component)
        {
            return false;
        }

        public override Type ComponentType
        {
            get { return typeof(object); }
        }

        public override bool IsReadOnly
        {
            get { return false; }
        }

        public override Type PropertyType
        {
            get
            {
                return typeof (object);
            }
        }
}

다른 팁

제 생각에는 DataGrid 용도 TypeDescriptor 객체 속성을 가져 오려면 열을 생성합니다. 그래서 당신은 당신의 DynamicObject 구현 ICustomTypeDescriptor. 구현 GetProperties 객체의 동적 특성을 반환하도록 방법.

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