2013-03-03 2 views
0

나는 당신은 내가 <controls:WatermarkService.Watermark> 내부 "MainCategoryTextBlock"TextBlock의을 원하는 WatermarkService 구현을 여기 https://stackoverflow.com/a/836463/1548347변경의 DataContext - WPF

을 볼 수 있습니다

<AdornerDecorator> 
         <TextBox 
          Height="20" 
          Margin="10,0" 
          Grid.Column="0" 
          Text="{Binding MainCategoryTextBoxValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="MainCatTextBox"> 

          <controls:WatermarkService.Watermark> 
           <TextBlock VerticalAlignment="Center" x:Name="MainCategoryTextBlock"> </TextBlock> 
          </controls:WatermarkService.Watermark> 
         </TextBox> 
</AdornerDecorator> 

내부에 워터 마크 텍스트 상자가 포함되어 사용자 제어 할 수 있습니다 내 ViewModel에서 RunTime의 워터 마크 텍스트를 변경하려면 DataContext를 UserControl DataContext와 동일하게 설정하십시오.

RelativeSource를 사용하여 "MainCategoryTextBlock"DataContext를 UserControl DataContext에 바인딩하려고했지만 성공하지 못했습니다 (구문 오류 일 수도 있습니다 - 확실하지 않습니다).

DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

어떻게 해결할 수 있습니까?

감사

답변

0

당신은보기 모델에 윈도우의 데이터 컨텍스트 속성을 설정하고보기 모델 속성에있는 TextBlock의 텍스트 속성을 결합해야합니다.

DataContext={Binding ElementName="YourUserControlName", Path=DataContext} 

하지만 난 당신이 FindAncestor을 사용할 수 있도록 당신이 adorner 데코레이터 내부에 텍스트 상자를 사용하는 것을 볼 수있다 : 당신의 UserControl 다음 이름이있는 경우

<TextBlock Text={Binding Path=PropertyOnViewModel} /> 
+0

이 방법을 사용할 수 없습니다. 나는 코드에서 내 view의 datacontext를 설정했다. (필자의 PRISM 기반 응용 프로그램). 내 View에서 인스턴스를 생성하고 제안한 작업을 수행 할 경우 ViewModel의 인스턴스가 2 개 있습니다. – Ofir

0

당신은 이런 식으로 작업을 수행 할 수 있습니다 이 경우에는 텍스트 상자와 UserControl이 동일한 시각적 트리에 속해 있지 않기 때문입니다.

+0

내 UserControl 이름을 주려고했지만 다음 메시지가 나타납니다. – Ofir

+0

@Ofir what message? –

+0

오, 죄송합니다. 다음은 메시지입니다. 오류 2 : 형식 이름 'Views'가 'DataPresenterModule.DataPresenterModule'형식에 없습니다. 한편 내가 다른 방법으로 문제를 해결했지만 여전히 어떻게 이런 식으로 해결할 수 있습니까? – Ofir