2016-10-14 10 views
0

약간의 연구를했지만 내 질문에 대한 답을 찾지 못했습니다. 그곳에는 StackPanel과 두 개의 TextBlock을 내부에 가지고있는 DataGridTemplateColumn이 있습니다. TextBlock 중 하나만 편집하고 싶습니다. 가능합니까?DataGridTemplateColumn에서 하나의 컨트롤 만 편집 할 수 있습니까?

내 코드가있다 :

<DataGrid Name="gdProducts" 
       MinHeight="100" 
       ItemsSource="{Binding ProductsView, UpdateSourceTrigger=PropertyChanged}" 
       SelectedItem="{Binding SelectedProduct, UpdateSourceTrigger=PropertyChanged}" 
       AutoGenerateColumns="False" 
       GridLinesVisibility="None" 
       IsSynchronizedWithCurrentItem="False" 
       CanUserAddRows="False" 
       CanUserDeleteRows="False"> 
     <DataGrid.Columns> 

      <!-- other columns --> 

      <DataGridTemplateColumn Header="Waiting Period" 
           IsReadOnly="False" 
           Width="80"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding WaitingPeriod}"/> 
          <TextBlock Text=" days"/> 
         </StackPanel> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 
    </DataGrid> 

코드가 나는 두 TextBlocks (전체 StackPanel의)을 편집합니다 기록 방법. 그건 내가 원하는 게 아니야.

감사합니다!

EDIT 내 실수에 대한

죄송합니다, 실제로 내 위의 코드는 나를 전혀 아무것도를 편집 할 수 없습니다. IsReadOnly를 False로 설정하면 다른 DataGrid 열 유형과 같이 편집 할 수 있습니다.

답변

1

바로 편집 할 속성에 대신하는 TextBlock의 텍스트 상자를 사용

<StackPanel Orientation="Horizontal"> 
     <TextBox Text="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.WaitingPeriod}"/> 
     <TextBlock Text=" days"/> 
    </StackPanel> 

을 RelativeSource는 데이터 그리드에 시각적 트리를 당신을 복용하고, 데이터 그리드의 DataContext이 당신의 ViewModel이며, 이것은 당신이 왜이다 WaitingPeriod 속성에 대한 액세스.

+1

고마워요,이 작품. 귀하의 답변 외에도 ** TextBlock 템플릿과 일치시키기 위해 ** BorderThickness = "0"** 속성을 TextBox에 추가하는 것이 좋습니다. – renatogbp