2009-08-19 13 views
6

グリッドに表示中に動的に属性(Browsable(false)など)を追加したいとします。シナリオは私がいくつかの公共のプロパティを持つカスタムクラスを持っているということです。しかし、私はすべてのパブリックプロパティをUIに表示する必要はありません。退出はありますか?PropertyGridのTypeDescriptorを使用してプロパティレベルの属性を動的に追加

TypeDescriptorを使ってみました。ただし、プロパティレベルではなく、タイプレベルでのみ機能します。私は不動産レベルでそれを使う方法について助けを見つけることができませんでした。

どのポインタも高く評価されます。

+0

可能ですが、私は私の質問に完全な実装を提供しました。http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedescriptor-at-runtime/12143653 – Gman

答えて

2

は、実際にそれは可能ですが、私はそれがかなり曖昧かつ不完全に文書化されている認めざるを得ません。キーは、System.ComponentModel.TypeDescriptionProviderから独自のカスタムTypeDescriptorProviderを派生させることです。次に、あなた自身のTypeDescriptor子孫を返すことができます。

これは、ASP.NET MVCのViewModelsとメタデータに関するかなり厄介な制限を修正するためにこれを行いましたが、それを使用して独自の余分なメタデータを挿入することもできます。

3

私はここ数日間、この同じ地域で働いています。短いストーリー、私は結論に達しました、これは不可能です。

「UI」コードとカスタムクラスを混在させたくないため、実行時に属性を適用しようとしているのはなぜですか?

この場合、BrowsableAttributeはComponentModel(http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx)のメンバーであり、WinFormsと同じ意味ではUIに関係しません。

カール

関連する問題