現在、さまざまな形式のデータを保持する単純なクラスがありますが、この質問の目的でMyData
と呼びます。クラスは、通常、コンテナのリソースセクションの下にxamlで作成されます。現在、DependencyProperty
という名前のShow
があり、そのデータをUIで表示する必要があるかどうかを示します。このリソースの一般的な使用方法は、TextBlock
をテンプレートとしてデータを表示し、コンバータを使用してVisibility
にShow
をバインドすることです。 Show
の値自体は通常、別のDependencyProperty
(通常はMVVM実装のViewModel)に由来します。私は以下の例を持っています。Silverlight - 複数のバインディングを使用して可視性を判断する
<navigation:Page.Resources>
<ViewModel x:Name="MyModel"/>
<MyData Data="Some Sample Data" Show="{Binding ModelValue, ElementName=MyModel}"/>
<DataTemplate>
<TextBlock Text={Binding Data} Visibility="{Binding Show, Converter={StaticResource BoolToVisibilityConverter}}"/>
</DataTemplate>
</navigation:Page.Resources>
上記のシナリオは、明らかに私が現在取り組んでいるものの簡略版ですが、現在は完全に機能しています。しかし、データの可視性に影響を与えるために複数のバインディングを許可する必要があります。明確にするために、すべての値が真である場合にのみ、データが表示されます。だから、上からのMyDataのXAMLは、より次のようになります。
<MyData Data="Some Sample Data">
<MyData.Show>
<AnotherClass Value="{Binding ModelValue1, ElementName=MyModel}"/>
<AnotherClass Value="{Binding ModelValue2, ElementName=MyModel}"/>
</MyData.Show>
</MyData>
私が最初に考えたのはShow
ObservableCollection<bool>
を作ることだったが、それはアイテムのみ自ら場合、その項目の値が変更するかどうかを追跡しません。変化する。たとえば、 'ModelValue1'がtrueからfalseに変更されると、コレクションのCollectionChanged
イベントは発生しません。だから、私は何かの可視性を判断するために複数のバインディングを利用する方法が必要です。
私はこれがかなり長い質問であることを理解していますが、そのような複雑なものであるため、必要に応じて詳細にしようとしました。私は何かを明確にするように私に依頼してください。
私はそれも動作するはずだと思った。私は何か間違っていると思う。あなたの誰かがこの[サンプルアプリケーション](http://dl.dropbox.com/u/26625851/SampleApp.zip)を見て、私が間違っていることを教えてもらえますか?ターゲット値の状態に基づいてテキストブロックを非表示にして表示する必要があります。 –
ターゲット値にバインドするときは、代わりに 'Source = {StaticResource MyModel}'を使用するときに 'ElementName = MyModel'を使用します。私はあなたが投稿したアプリでこれをチェックして、それは魅力のように動作します。 – dmusial
恐ろしい!早速のお返事ありがとうございます。 'ElementName'と' Source'の違いは何ですか? 'ElementName'は通常動作しますが、なぜこの場合は動作しませんか? –