2013-01-21 2 views
0

MVVM 또는 PRISM 기반 모델을 사용하고 있지 않습니다. DataGrid 내 DataGrid와 동일한 레벨에있는 컨트롤에 DataGrid DataTemplate을 바인딩하려고합니다. 이 작업을 수행하면 null이 반환됩니다.DataGrid 내의 DataTemplate에서 컨트롤 참조에 바인딩하는 방법

2 질문 :

  1. 이 LayoutRoot 무엇? 이 예제를 그리드라고 할 때 객체를 반환합니다. LayoutRoot를 XAML의 캔버스로 변경하면 null이 반환됩니다.

  2. DataGrid 열의 DataTemplate에서 내 XAML의 Canvas에 어떻게 바인딩합니까?

나는 다음과 같은 XAML 한 내 캔버스 내

<Grid x:Name="LayoutRoot" Background="#F7F7F7"> 
    <Border> 
     <Canvas x:Name="LayoutCanvas"> 
      <!-- A lot of Xaml --> 
     </Canvas> 
    </Border> 
</Grid> 

(때문에 길이의 트림), 나는 다음과 같은 데이터 그리드가 : 내가하려고 할 때

<sdk:DataGrid x:Name="dgOrderContents" AutoGenerateColumns="False"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn Header="Thumb"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ucp:PhotoComponentForDataGrid Source="{Binding PhotoUrl}" PopupTarget="{Binding ElementName='LayoutCanvas' }" Width="60" /> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 

내 문제를 'LayoutCanvas'를 사용하여 바인드하면 오류가 발생하는 값은 null입니다. 'LayoutRoot'에 바인딩하면 Canvas가 필요한데, 내 UserControl 내부에있는 FloatableWindow 컨트롤은 Canvas를 사용하기 때문에 작동합니다.

미리 도움을 청하십시오.

답변

0

MVVM 또는 PRISM 모델을 사용하고 있지 않기 때문에 바인딩을 작동시킬 수 없었을 수 있습니다. 하지만 DataGrid의 LoadingRow 이벤트를 사용하여 작동하도록했습니다.

private void dgOrderContents_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    foreach (DataGridColumn col in dgOrderContents.Columns) 
    { 
     if (col.Header.ToString() == "Thumb") 
     { 
      PhotoComponentForDataGrid pcdControl = (PhotoComponentForDataGrid)col.GetCellContent(e.Row); 
      pcdControl.PopupTarget= this.LayoutCanvas; 
     } 
    } 
} 

이렇게하면 사용자 정의 사용자 정의 컨트롤에서 LayoutCanvas 컨트롤을 참조 할 수있었습니다.

관련 문제