2010-12-03 12 views
1

私が質問に入る前に、少し背景を教えてください。カスタム構築されたユーザーコントロールに適用できるカスタムキャッシュメカニズムを開発しようとしています。 (マークアップに宣言的に設定された特定のフラグに応じて、以前にレンダリングされたコンテンツのキャッシュされたバージョンをロードするか、正常に実行する必要があります。次回ロード時にコンテンツのキャッシュを生成する必要があります)。私はマークアップで宣言的に特定のフラグを渡して、Page Initでその値を確認し、フラグ値に応じて、コントロールがキャッシュされたバージョンをロードするかどうかを判断できるようにしたいと考えています。私が直面してるユーザーコントロールの単一のプロパティを 'DataBind'することは可能ですか?

<uc:MyUC ID="N1" runat="server" 
    CacheProp='<%# SomeEnum.A | SomeEnum.B |SomeEnum.C %>' 
    PropA='<%# this.SomePropA %>' 
    PropB='<%# (this.SomePropB %>' 
    PropC='<%# this.SomePropC %>' 
/> 

問題は、私はのDataBindを呼び出した場合に限り、私は承知しているように私のみ)(宣言マークアップに割り当てられたプロパティの値を得ることができるということです。しかし、私は2つの問題に直面しています: MyUCから最初にthis.DataBind()を呼び出すと、キャッシュの目的を無効にするすべての子コントロールがバインドされます。 LoadCompleteイベントが発生する前にDataBind()を呼び出さないようにすべてのユーザーコントロールも構築されているため、それらのユーザーが所有する親コントロールが初期化を完了し、子ユーザーコントロールに宣言的に渡されるプロパティが計算されていることを確認します(すなわち、PropA,PropB,PropC)。

ここで、CachePropプロパティをバインドして、他のすべてのプロパティをバインドするデータなしで、すべての子コントロールのデータバインディングをトリガーせずに値を取得する方法はありますか?

ありがとうございます!

ジュゼッペ

+0

を私はそれが不可能であると仮定し始めます! : –

+0

なぜ単に '?それらのプロパティをどのように設定したいのですか? –

+0

残念ながら、プロパティ "SomeEnum.A | SomeEnum.B | SomeEnum.C"を文字列として渡し、ビット単位ORの評価値ではありません。 –

答えて

0

これは動作するはずです:背後

<uc:MyUC ID="N1" runat="server" CacheProp="A|B|C"... >

コード:

strRawValue = N1.Attributes["CacheProp"]; 
string[] arrValues = strRawValue.Split('|'); 
SomeEnum value = (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[0]); 
for (int i = 1; i < arrValues.Length; i++) 
    value |= (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[i]); 
関連する問題