2015-01-07 8 views
0

아래 코드를 가지고 RowDetailsTemplate에서 "btnUpdate"단추 컨트롤을 가져 와서 코드의 가시성을 설정하고 싶습니다. 어떻게해야합니까? 어떤 조언도 감사 드리며 미리 감사드립니다.Silverlight : DataGrid RowDetailTemplate에서 컨트롤에 액세스하는 방법

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid HorizontalAlignment="Left" Name="grid1" VerticalAlignment="Top" > 
     <Grid.RowDefinitions> 
      <RowDefinition Height="40" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 

     </Grid.ColumnDefinitions> 
     <Grid HorizontalAlignment="Left" Name="grid2" VerticalAlignment="Top" Grid.RowSpan="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="500" /> 
       <ColumnDefinition Width="80*" /> 
       <ColumnDefinition Width="111*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Button Content="Refresh" Click="btnRefresh_Click" Grid.Column="1" Height="23" HorizontalAlignment="Right" Name="btnRefresh" VerticalAlignment="Top" Width="80"/> 
      <Button Content="Add" Click="btnAdd_Click" Grid.Column="2" Height="23" HorizontalAlignment="Right" Name="btnInsert" VerticalAlignment="Top" Width="80" /> 
      <sdk:Label Height="28" HorizontalAlignment="Left" Name="Title" VerticalAlignment="Top" Content="Title" HorizontalContentAlignment="Left" FontSize="20" FontWeight="Bold" Width="Auto"/> 
     </Grid> 
     <data:DataGrid x:Name="OverviewDataGrid" Grid.Row="1" AutoGenerateColumns="False" RowEditEnded="OverviewDataGrid_RowEditEnded" SelectionChanged="OverviewDataGrid_SelectionChanged"> 
      <data:DataGrid.Columns> 
       <data:DataGridTextColumn Header="Code" Binding="{Binding code, TargetNullValue=(enter code)}" IsReadOnly="True"></data:DataGridTextColumn> 
       <data:DataGridTextColumn Header="Description" Binding="{Binding description}" IsReadOnly="True"></data:DataGridTextColumn> 
       <data:DataGridTemplateColumn Header="Delete"> 
        <data:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button x:Name="btnDelete" Content="Delete" Click="btnDelete_Click"></Button> 
         </DataTemplate> 
        </data:DataGridTemplateColumn.CellTemplate> 
       </data:DataGridTemplateColumn> 

       <data:DataGridTemplateColumn > 
        <data:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button x:Name="btnCollapse" Grid.Column="0" Grid.Row="0" Content="+" Click="btnCollapse_Click" HorizontalAlignment="Center" Width="20" VerticalAlignment="Center" /> 
         </DataTemplate> 
        </data:DataGridTemplateColumn.CellTemplate> 
       </data:DataGridTemplateColumn> 
      </data:DataGrid.Columns> 

      <data:DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <Border BorderThickness="0" Background="BlanchedAlmond" Padding="1"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="0.17*"/> 
           <ColumnDefinition Width="0.30*"/> 
           <ColumnDefinition Width="0.17*"/> 
           <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
           <RowDefinition /> 
          </Grid.RowDefinitions> 

          <TextBlock FontSize="12" Text="Code : " VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" Margin="1"/> 
          <TextBlock FontSize="12" FontWeight="Bold" Foreground="MidnightBlue" Text="{Binding code}" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="0" Margin="1" Grid.ColumnSpan="3"/> 

          <TextBlock FontSize="12" Text="Description: " VerticalAlignment="Center" Grid.Column="0" Grid.Row="1" Margin="1"/> 
          <TextBox FontSize="12" Text="{Binding description, Mode=TwoWay}" Width="350" TextWrapping="NoWrap" HorizontalAlignment="Left" 
            AcceptsReturn="True" Grid.Column="1" Grid.Row="1" Margin="1" Grid.ColumnSpan="3"/> 
          <Button x:Name="btnUpdate1" Content="Update" Click="btnUpdate_Click" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="4" Margin="1"/> 
         </Grid> 
        </Border> 
       </DataTemplate> 
      </data:DataGrid.RowDetailsTemplate> 
     </data:DataGrid> 
    </Grid> 
</Grid> 
+0

무엇의 가시성에 코드 아래에 추가 하시겠습니까? 버튼 그거? – John

+1

일반적으로 DataTemplate 내부의 요소의 개체 모델에는 액세스 할 수 없습니다. 대신 XAML에서 바인딩을 사용해야합니다. – McGarnagle

답변

0

아래 단계에 따라 RowDetailsTemplate에서 컨트롤을 가져옵니다.

  1. XAML에서 데이터 그리드에 loadingRowDetails 이벤트 {LoadingRowDetails="yourDataGrid_LoadingRowDetails"}를 추가합니다.

  2. XAML 클래스

    private void yourDataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) 
    {   
        Button btn = (e.DetailsElement as FrameworkElement).FindName("btnUpdate") as Button; 
        if (ok.Equals(false)) 
         btn.Visibility = System.Windows.Visibility.Collapsed; 
    }