(更新)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イベントをキャッチしようとします。これは、物事が変わるときにそれを並べ替え、グループ化することを意味します。
これを行うより良い方法がわかっている場合は、教えてください。お願いします。
あなたが言うように、些細な、しかし、動的なクラスを生成するよりも間違いなくより簡単ではない... –
これはそれを行うための興味深い方法であるかもしれない、それは間違いなく私をスパークさ好奇心。それをやってみるとバックレポート。 – Dann
はなく、それは(grrrが、それがICustomTypeDescriptorをサポートしていないとして)Silverlightであるため、別のプロジェクトで、正常に働いた。 を答えとしてマークされますが、ウィルのための任意のアイデアilverlightも良いでしょう。 – Dann