2009-05-20 5 views
2

이 질문은 보통 하나의 C#과 관련하여 하나의 질문과 동일한 질문입니다 (I asked earlier). 이 실버 라이트 2, 나는 그래서 여기 은 ICustomTypeDescriptorSilverlight 2 : 동적으로 생성 된 개체에서 INotifyPropertyChanged?

이없는 질문은 다시입니다 :

내가 가진이 몇 가지 스위치 패널 (비유를 좋아하는 사람들을 위해) 말한다. 각 스위치 패널에는 Name (문자열)이 On (켜짐) 또는 Off (꺼짐) 상태 일 수있는 스위치가 있습니다. 스위치 패널과 스위치는 INotify 인터페이스가있는 객체입니다.

이름 스위치를 사용하면 컬렉션에 가능한 모든 스위치 이름 목록을 만들고이 이름이 모두 속성 인 동적 클래스를 만듭니다.

SwitchPanel1 (Switches(Switch1 ("Main",On) , Switch2("Slave",Off))) 
SwitchPanel2 (Switches(Switch1 ("Bilge",On) , Switch2("Main",Off))) 

(Main,Bilge,Slave) 

의 수집 및 특성을 가지고 그 생성되는 동적 클래스를 생성합니다 :

SwitchPanel : (SwitchPanel) 
Main : (Switch) 
Bilge : (Switch) 
Slave: (Switch) 

아이디어는 그 스위치 패널은 이름에 스위치가있는 경우 해당 속성에 배치됩니다. 그래서 LINQ

내가 INotfyPropertyChanged이 새로운 동적 클래스를 캐스팅 및 새로운 특성의 실제 변화를 잡으려면
propeties["Main"].SetValue(newSwitchType,SwitchPanel.Switches.FirstOrDefault(sw => sw.Name == "Main")); 

의 비트를 사용하므로 스위치 변경 상태 경우 동적 객체를보고합니다.

왜? 목록보기에 표시해야하며 사용중인 목록보기에는 바인딩 경로가 아닌 속성 이름을 제공하여 바인딩이 있습니다.

또한 INotifyPropertyChanged에 대해 개체를 캐스팅하여 INotify 이벤트를 catch하려고합니다. 즉, 상황이 바뀌면 분류하고 그룹화합니다.

답변

0

INotifyPropertyChanged를 구현하는 bool 문자열의 파생 된 일반 사전을 만들 수 있습니다. 인덱서는 다음과 같이 할 수 있습니다

http://silverlight.net/forums/t/51864.aspx

그 방법은 당신이 아직도의 동적 모음을 가질 수

스위치 패널에서
public new bool this[string key] 
{ 
    get 
    { 
     if(this.ContainsKey(key)) 
      return base[key]; 
     return default(bool); 
    } 
    set 
    { 
     base[key] = value; 
     OnPropertyChanged(key.ToString()); 
    } 
} 

(가) 사전에 스위치를 결합하는 사용자 지정 IValueConverter를 사용 각 부울 값이있는 이름이며 동적 유형을 만들지 않고 데이터에 직접 바인딩합니다.

+0

흥미 롭습니다. 곧 그걸 줄 것이다. – Dann

관련 문제