2011-01-12 30 views
3

考慮:WPF的條件裝載控制

 <StackPanel>  
<View:ArcController x:Name="control1" Visibility="{Binding Path=CanShowDateControl, Converter={StaticResource bool2VisibilityConverter}}" /> 
<my1:DateLabelView x:Name="control2" DataContext="{Binding Path=DateLabelViewModel}" Visibility="{Binding ElementName=ctrlTableToolbar, Path=DataContext.IsDateReadOnly, Converter={StaticResource bool2VisibilityConverter}}" /> 

     </StackPanel>   

我有一個StackPanel內的兩個控制(控制1和控制2),並在同一時間,我想只顯示控件之一。 如代碼所示,控件的可見性由「IsDateReadOnly」和「CanShowDateControl」驅動。 而且,根據我的viewmodel邏輯... CanShowDateControl =!IsReadOnly。

所以,有一次我只會顯示兩個控件之一。

問題:我的問題是,雖然我一次只顯示一個控件,但我的xaml正在創建兩個控件的實例。是否有可能創建我只顯示的控件的實例?

把那:

1)我想用結合顯示/隱藏,這樣的邏輯就在於我的視圖模型。 2)我可以將這兩個控件放在一個包裝控件中。因爲我在不同的地方使用它。

感謝您的關注。

+0

正在創建一個兩個控件的實例,這是一個很大的問題? – ChrisF 2011-01-12 12:29:13

回答

3

使用ContentControlContentTemplateSelector與兩個DataTemplate s。一個用於ReadOnly和其他用於Not ReadOnly

在選擇器中,根據屬性返回相應的DataTemplate

你可以使用的其他方法是創建一個Custom Control,它有兩個(或多於兩個)屬性來存儲兩個控件。基於一個條件,它應該添加其中的一個到Visual Tree,這將防止另一個被加載。