22

私はかなり長い間 WPF をいじっていましたが、今日初めてMultiBinding、次のようなものを別のものにネストする必要がありました。

<MultiBinding>
   <Binding />       
   <MultiBinding>
      <Binding />
      <Binding />
   </MultiBinding>
</MultiBinding>

フレームワークで許可されていないことを示す例外が発生します。

XamlParseException が処理されませんでした: 型 'System.Collections.ObjectModel.Collection(System.Windows.Data.BindingBase)' のコレクションに値を追加すると、例外がスローされました。

InnerExceptionより明示的です:

BindingCollection は、MultiBinding タイプのアイテムをサポートしていません。バインディングのみが許可されます。

詳細については Web を掘り下げて、まさに私の問題であるこの Microsoft Connectの問題に出くわしました。

フィードバックありがとうございます。現在、WPF はこれをサポートしていません。この機能は何年にもわたって要求されてきました (最近では今月初め - https://connect.microsoft.com/WPF/feedback/details/650164/nested-multibindingを参照してください)。これについては、今後のリリースで検討を続けます。

今、私はそれを簡単にしないだろうという私の平和を作りました. まだこれが必要ですが、MultiBindings をネストするにはどうすればよいですか?

4

6 に答える 6

4

パラメーターを受け取るコンバーターがある場合は、次のようにすることができます。

  • 「固定」データをコンバーターに渡すためのクラスを作成します
  • クラスに追加DependencyPropertiesします(Xamlの値をバインドできるようにするため)
  • xamlで、マルチバインディングの代わりにコンバーターを使用したバインディングを使用します。次のようになります。

    <MultiBinding>
        <Binding Source="SomeObject" Path="CoreValue" Converter="{StaticResource YourNewConverter}">
            <Binding.ConverterParameter>
                <ns:ParameterClass Value1="{Binding Parameter1}" Value2="{Binding Parameter1}" />
            </Binding.ConverterParameter>
        </Binding>
     .... 
    

制限は、(AFAIK)値が変更された場合にのみ再計算されるCoreValueことです。コンバーターのパラメーターが変更された場合、値は自動的に再バインドされません。

(エラーが発生したことをお詫びします。テストするVSを利用せずにこれを入力しています...)

于 2012-04-23T13:04:53.803 に答える
1

文字列にバインドしている場合は、次の例のように StringFormat を使用できます。

 <TextBlock>
   <TextBlock.Text>
     <MultiBinding StringFormat="{}{0:0.###}/{1:0.###}" Mode="OneWay">
                        <Binding ElementName="This" Path="AggregatedDocDetail.ConfirmedQty"></Binding>
                        <Binding ElementName="This" Path="AggregatedDocDetail.Qty">   </Binding>
       </MultiBinding>
     </TextBlock.Text>
   </TextBlock>
于 2012-04-23T12:42:39.140 に答える
0

MultiConverter で 1 つのマルチバインディングを使用するだけです。

または、ビューモデル/データコンテキストの1つのプロパティで条件を公開することをお勧めします。

于 2012-04-23T12:29:46.063 に答える