我目前有一個簡單的類來存放各種形式的數據,我將其稱爲MyData
用於此問題。該類通常在xaml的容器資源部分下創建。它目前有一個名爲Show
的DependencyProperty
,表示它的數據是否應該在UI中可見。此資源的常見用途是模擬TextBlock
以顯示數據並使用轉換器將Show
綁定到其Visibility
。 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>
上面的情況顯然是我目前正在處理的簡化版本,但它目前完美地工作。但是,我需要允許多個綁定來影響數據的可見性。爲了澄清,當且僅當所有的值都是真的,那麼應該顯示數據。所以,從上面的邁德特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)並讓我知道我在做什麼錯了?它應該根據目標值的狀態隱藏和顯示文本塊。 – 2011-12-30 20:02:13
當你使用'Source = {StaticResource MyModel}'的時候,你使用'ElementName = MyModel'綁定目標值。我已經在你發佈的應用中檢查過它,它的功能就像一個魅力。 – dmusial 2011-12-30 23:46:08
太棒了!感謝您的快速回復。 'ElementName'和'Source'有什麼區別? 'ElementName'通常有效,爲什麼它在這種情況下不起作用? – 2011-12-31 00:02:22