2011-01-12 1 views
3

가 주어 제어 :조건부로드

 <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, 및 control2)을 가지고 있고, 한 번에 내가 컨트롤의 하나를 보여주고 싶어요. 코드에서 볼 수 있듯이 컨트롤의 가시성은 "IsDateReadOnly"및 "CanShowDateControl"에 의해 결정됩니다. 그리고 내 viewmodel 논리에 따라 ... CanShowDateControl =! IsReadOnly.

그래서 한 번에 두 컨트롤 중 하나만 표시합니다.

질문 : 내 문제는, 한 번에 하나의 컨트롤 만 표시하고 있지만 내 xaml은 두 컨트롤의 인스턴스를 만듭니다. 내가 보여주는 오전 컨트롤의 인스턴스를 만들 수 있습니까?

은 보내기 그 논리를 내 뷰 모델에있다, 그래서

1) 나는 바인딩을 사용/숨기기를 보여주고 싶어요. 2)이 두 컨트롤을 하나의 래퍼 컨트롤 안에 유지할 수 있습니다. 이후 나는 다른 장소에서 그것을 사용하고 있습니다.

관심을 가져 주셔서 감사합니다.

+0

두 컨트롤의 인스턴스를 많이 만들면 문제가 발생합니까? – ChrisF

+0

@ChrisF :이 컨트롤의 인스턴스를 여러 개 만들면이 컨트롤이 메모리를 적게 소비하도록 만들면 메모리 사용이 상당히 최적화됩니다. –

답변

3

ContentControlContentTemplateSelector에는 2 개의 DataTemplate이 사용됩니다. 하나는 ReadOnly이고 다른 하나는 Not ReadOnly입니다.

선택자에서 속성에 따라 적절한 DataTemplate을 반환하십시오.

다른 방법으로 두 개의 컨트롤을 저장하는 두 개 이상의 속성이있는 Custom Control을 만들 수 있습니다. 조건에 따라 Visual Tree에 그 중 하나를 추가해야 다른 하나가로드되지 않습니다.