2009-05-15 5 views
2

(更新)ICustomTypeDescriptorはWindowsフォームアプリケーションでは動作しますが、Silverlightでは動作しません。サポートされていません。私はこの考えを調査し続け、どこに行くのか見ていきます。 (/更新)C#INotifyProperty動的に作成されたオブジェクトのプロパティを変更しましたか?

私は、アナリティクスのようなもののためのいくつかのスイッチパネルを持っています。 これらのスイッチパネルには、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

propeties["Main"].SetValue(newSwitchType,SwitchPanel.Switches.FirstOrDefault(sw => sw.Name == "Main")); 

のビットを使用して、私はINotfyPropertyChangedに、この新しい動的クラスをキャストし、これらの新しい性質上、実際の変化をキャッチしたいので、スイッチの変更は述べる場合は、動的オブジェクトは、それを報告します。

なぜですか?リストビューで表示する必要があり、私が使用しているリストビューには、バインディングパスではなくプロパティ名を指定してバインディングがあります。

また、オブジェクトをINotifyPropertyChangedに対してキャストしてINotifyイベントをキャッチしようとします。これは、物事が変わるときにそれを並べ替え、グループ化することを意味します。

これを行うより良い方法がわかっている場合は、教えてください。お願いします。

答えて

1

おそらく、動的クラスは必要ありません。ランタイムバインディングプロパティは、ICustomTypeDescriptor/GetProperties()経由で実装することができ、独自のPropertyDescriptor実装を作成し、名前付きスイッチを返すことができます。変更について最初に分かっていることは明らかではありませんが、INotifyPropertyChanged、または以前のプロパティ固有の変更イベントを再び各プロパティに結びつけることができます(したがって、各PropertyDescriptorは、指定されたスイッチ内のイベントにアタッチします)。どちらか

不可能些細な、しかしではないわけではありません。

+0

あなたが言うように、些細な、しかし、動的なクラスを生成するよりも間違いなくより簡単ではない... –

+0

これはそれを行うための興味深い方法であるかもしれない、それは間違いなく私をスパークさ好奇心。それをやってみるとバックレポート。 – Dann

+0

はなく、それは(grrrが、それがICustomTypeDescriptorをサポートしていないとして)Silverlightであるため、別のプロジェクトで、正常に働いた。 を答えとしてマークされますが、ウィルのための任意のアイデアilverlightも良いでしょう。 – Dann

関連する問題