2013-08-19 61 views
1

我有一个父DataGrid,并在那个DataGrid中我有一个内部DataGrid.My的目标是填充内部DataGrid在行上单击我的父DataGrid.Below是我的代码:从两个不同的ObservableCollection绑定项目到一个控件

<DataGrid ItemsSource="{Binding GuestHostTotalList}" HorizontalAlignment="Stretch" Margin="16,15,-14,-15" x:Name="dataGridParent" 
         Style="{StaticResource EfesDataGridStyle}" FrozenColumnCount="14" GridLinesVisibility="All" 
         HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Cursor="Hand" AutoGenerateColumns="False" 
         RowDetailsVisibilityMode="Visible" > 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="MouseLeftButtonUp"> 
         <ei:CallMethodAction MethodName="UpdateEvent" TargetObject="{Binding}"></ei:CallMethodAction> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
       <DataGrid.ColumnHeaderStyle> 
        <Style TargetType="DataGridColumnHeader"> 
         <Setter Property="HorizontalAlignment" Value="Stretch"/> 
         <Setter Property="Foreground" Value="White"></Setter> 
         <Setter Property="Background" Value="Black"></Setter> 
         <Setter Property="MinHeight" Value="28"></Setter> 
         <Setter Property="Cursor" Value="Hand"></Setter> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="*" /> 
              <ColumnDefinition Width="Auto" /> 
             </Grid.ColumnDefinitions> 
             <Border x:Name="BackgroundBorder" BorderThickness="0" Background="{StaticResource Siyah}" BorderBrush="{StaticResource Siyah}" Grid.ColumnSpan="2" /> 
             <ContentPresenter Margin="6,3,6,3" VerticalAlignment="Center" /> 
             <Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Grid.Column="3" Width="8" Height="6" Fill="White" Margin="0,0,8,0" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.4" /> 
             <Rectangle Width="1" Fill="#AAC377" HorizontalAlignment="Right" Grid.ColumnSpan="2" /> 
             <Rectangle Width="1" Margin="0,0,1,0" Fill="#425B10" HorizontalAlignment="Right" Grid.ColumnSpan="2" /> 
             <Thumb x:Name="PART_LeftHeaderGripper" Visibility="Hidden" HorizontalAlignment="Left" /> 
             <Thumb x:Name="PART_RightHeaderGripper" Visibility="Hidden" HorizontalAlignment="Right" /> 
            </Grid> 
            <ControlTemplate.Triggers> 
             <Trigger Property="SortDirection" Value="{x:Null}"> 
              <Setter TargetName="BackgroundBorder" Property="Background" Value="{DynamicResource Siyah}" /> 
              <Setter TargetName="BackgroundBorder" Property="BorderBrush" Value="Transparent" /> 
             </Trigger> 
             <MultiTrigger> 
              <MultiTrigger.Conditions> 
               <Condition Property="IsMouseOver" Value="True" /> 
               <Condition Property="SortDirection" Value="{x:Null}" /> 
              </MultiTrigger.Conditions> 
              <Setter Property="Background" TargetName="BackgroundBorder" Value="{StaticResource ASiyah}" /> 
              <Setter Property="BorderBrush" TargetName="BackgroundBorder" Value="{StaticResource ASiyah}" /> 
             </MultiTrigger> 
             <MultiTrigger> 
              <MultiTrigger.Conditions> 
               <Condition Property="IsMouseOver" Value="true" /> 
               <Condition Property="SortDirection" Value="{x:Null}" /> 
              </MultiTrigger.Conditions> 
              <Setter TargetName="BackgroundBorder" Property="Background" Value="{StaticResource ASiyah}" /> 
              <Setter TargetName="BackgroundBorder" Property="BorderBrush" Value="{StaticResource ASiyah}" /> 
             </MultiTrigger> 
             <Trigger Property="SortDirection" Value="Ascending"> 
              <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
              <Setter TargetName="SortArrow" Property="RenderTransform"> 
               <Setter.Value> 
                <RotateTransform Angle="180" /> 
               </Setter.Value> 
              </Setter> 
             </Trigger> 
             <Trigger Property="SortDirection" Value="Descending"> 
              <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
             </Trigger> 
             <Trigger Property="DisplayIndex" Value="0"> 
              <Setter Property="Visibility" Value="Collapsed" TargetName="PART_LeftHeaderGripper"></Setter> 
             </Trigger> 
            </ControlTemplate.Triggers> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
         <Style.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Background" Value="LightGray" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </DataGrid.ColumnHeaderStyle> 
       <DataGrid.Columns>      
        <DataGridTextColumn Header="Kod" Binding="{Binding Code}" Width="50*" /> 
        <DataGridTextColumn Header="Tarih" Binding="{Binding History}" Width="70*"/> 
        <DataGridTextColumn Header="Ev Sahibi" Binding="{Binding Own}" Width="100*"/> 
        <DataGridTextColumn Header="Konuk" Binding="{Binding Guest}" Width="50*"/> 
        <DataGridTextColumn Header="1" Binding="{Binding One_guest}" Width="30*" /> 
        <DataGridTextColumn Header="X" Binding="{Binding X_game}" Width="30*" /> 
        <DataGridTextColumn Header="2" Binding="{Binding Two_guest}" Width="30*"/> 
        <DataGridTextColumn Header="T1" Binding="{Binding T1_host}" Width="30*" /> 
        <DataGridTextColumn Header="TX" Binding="{Binding TX_host}" Width="30*" /> 
        <DataGridTextColumn Header="T2" Binding="{Binding T2_host}" Width="30*" /> 
        <DataGridTextColumn Header="+" CellStyle ="{StaticResource DataGridCellStyle}" Binding="{Binding TotalOptions}" Width="30*"/> 
        <DataGridTextColumn Header="Min" Binding="{Binding MinOption}" Width="30*" /> 
        <DataGridTextColumn Header="Lig" Binding="{Binding League}" Width="70*" /> 
        <DataGridTemplateColumn Header="Durum" Width="Auto" > 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <ToggleButton x:Name="toggleBtn" VerticalAlignment="Center" Margin="0" Style="{StaticResource SlidingToggleButton}" BorderBrush="{x:Null}" IsChecked="{Binding ToggleBtn}" Background="#FF2F63FF" /> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn>      
       </DataGrid.Columns> 
       <DataGrid.RowStyle> 
        <Style TargetType="{x:Type DataGridRow}"> 
         <EventSetter Event="MouseLeftButtonUp" Handler="RowClick"/> 
        </Style> 
       </DataGrid.RowStyle> 
       <DataGrid.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
       </DataGrid.Resources>    

       <DataGrid.RowDetailsTemplate x:Uid="test123"> 
        <DataTemplate x:Name="testTemplete"> 
         <DataGrid x:Name="innerGrid" ItemsSource="{Binding SubGridItemList}" Style="{StaticResource EfesDataGridStyle}" Margin="50,2,2,2" MinHeight="40" GridLinesVisibility="All" HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Visibility="Collapsed" > 
          <DataGrid.ColumnHeaderStyle> 
           <Style TargetType="DataGridColumnHeader"> 
            <Setter Property="Foreground" Value="White"></Setter> 
            <Setter Property="Background" Value="Black"></Setter> 
            <Setter Property="MinHeight" Value="28"></Setter> 
            <Setter Property="Cursor" Value="Hand"></Setter> 
            <Setter Property="Template"> 
             <Setter.Value> 
              <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
               <Grid> 
                <Grid.ColumnDefinitions> 
                 <ColumnDefinition Width="*" /> 
                 <ColumnDefinition Width="Auto" /> 
                </Grid.ColumnDefinitions> 
                <Border x:Name="BackgroundBorder" BorderThickness="0" Background="{StaticResource Siyah}" BorderBrush="{StaticResource Siyah}" Grid.ColumnSpan="2" /> 
                <ContentPresenter Margin="6,3,6,3" VerticalAlignment="Center" /> 
                <Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Grid.Column="3" Width="8" Height="6" Fill="White" Margin="0,0,8,0" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.4" /> 
                <Rectangle Width="1" Fill="#AAC377" HorizontalAlignment="Right" Grid.ColumnSpan="2" /> 
                <Rectangle Width="1" Margin="0,0,1,0" Fill="#425B10" HorizontalAlignment="Right" Grid.ColumnSpan="2" /> 
                <Thumb x:Name="PART_LeftHeaderGripper" Visibility="Hidden" HorizontalAlignment="Left" /> 
                <Thumb x:Name="PART_RightHeaderGripper" Visibility="Hidden" HorizontalAlignment="Right" /> 
               </Grid> 
               <ControlTemplate.Triggers> 
                <Trigger Property="SortDirection" Value="{x:Null}"> 
                 <Setter TargetName="BackgroundBorder" Property="Background" Value="{DynamicResource Siyah}" /> 
                 <Setter TargetName="BackgroundBorder" Property="BorderBrush" Value="Transparent" /> 
                </Trigger> 
                <MultiTrigger> 
                 <MultiTrigger.Conditions> 
                  <Condition Property="IsMouseOver" Value="True" /> 
                  <Condition Property="SortDirection" Value="{x:Null}" /> 
                 </MultiTrigger.Conditions> 
                 <Setter Property="Background" TargetName="BackgroundBorder" Value="{StaticResource ASiyah}" /> 
                 <Setter Property="BorderBrush" TargetName="BackgroundBorder" Value="{StaticResource ASiyah}" /> 
                </MultiTrigger> 
                <MultiTrigger> 
                 <MultiTrigger.Conditions> 
                  <Condition Property="IsMouseOver" Value="true" /> 
                  <Condition Property="SortDirection" Value="{x:Null}" /> 
                 </MultiTrigger.Conditions> 
                 <Setter TargetName="BackgroundBorder" Property="Background" Value="{StaticResource ASiyah}" /> 
                 <Setter TargetName="BackgroundBorder" Property="BorderBrush" Value="{StaticResource ASiyah}" /> 
                </MultiTrigger> 
                <Trigger Property="SortDirection" Value="Ascending"> 
                 <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
                 <Setter TargetName="SortArrow" Property="RenderTransform"> 
                  <Setter.Value> 
                   <RotateTransform Angle="180" /> 
                  </Setter.Value> 
                 </Setter> 
                </Trigger> 
                <Trigger Property="SortDirection" Value="Descending"> 
                 <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
                </Trigger> 
                <Trigger Property="DisplayIndex" Value="0"> 
                 <Setter Property="Visibility" Value="Collapsed" TargetName="PART_LeftHeaderGripper"></Setter> 
                </Trigger> 
               </ControlTemplate.Triggers> 
              </ControlTemplate> 
             </Setter.Value> 
            </Setter> 
            <Style.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter Property="Background" Value="LightGray" /> 
             </Trigger> 
            </Style.Triggers> 
           </Style> 
          </DataGrid.ColumnHeaderStyle> 
          <DataGrid.RowStyle> 
           <Style TargetType="{x:Type DataGridRow}"> 
            <EventSetter Event="MouseLeftButtonUp" Handler="InnerGridRowClick"/> 
           </Style> 
          </DataGrid.RowStyle> 
          <DataGrid.Columns> 
           <DataGridTextColumn Header="Kod" Binding="{Binding Kod}" Width="400" /> 
           <DataGridTextColumn Header="Alt Secenakler" Binding="{Binding Alt_Secenakler}" Width="500" />         
          </DataGrid.Columns> 
          <DataGrid.Resources> 
           <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
           <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
          </DataGrid.Resources> 
         </DataGrid>      
        </DataTemplate> 
       </DataGrid.RowDetailsTemplate> 
      </DataGrid> 

在上面的代码,你可以看到dataGridParent是父DataGrid和innerGrid是内DataGrid.Now我在我的视图模型1.GuestHostTotalList两个可观察集合(是我的父母DataGrid的的ItemSource)和2.SubGridItemList(此被用作我的innerDataGrid的ItemSource)。但我看到内部网格没有填充数据。 任何人都可以帮助我。提前感谢。

回答

0

您已在DataGrid.RowDetailsTemplate内定义了'内部'DataGrid。此Template用于显示行详细信息。因此,您的SubGridItemList集合应该位于“外部”DataGrid的每一行中显示的数据对象中。

因此,您有一个名为GuestHostTotalList的集合,它绑定到外部DataGrid.ItemsSource属性。无论本集合中的数据类型是什么类型的数据都需要添加集合属性以绑定到内部DataGrid.ItemSource如果您希望绑定起作用。

+0

因此,根据你没有办法我可以绑定两个不同的可观察集合,这些集合与我的innerDataGrid.thanks无关,用于回复。 –

+0

这不是我说的。你不清楚你实际想要达到什么......你说你有一个错误,所以我解释了你为什么会出错。 – Sheridan

+0

好的。那么@Sheridan在现在的情况下可能知道什么是解决这个问题的最好的方法,或者什么是最好的方法来做到这一点。我的目标是点击一行数据必须填充到我的内部网格中。现在这些数据可能与行数据有关,也可能不是。所以我创建了这个单独的observableCollection.Now我想知道什么是最好的方法来实现这一点。请给我建议。感谢您。 –

0

您不能直接将内部DataGrid绑定到集合“SubGridItemList”,因为现在它的DataContext是“GuestHostTotalList”的DataContext。你必须做的是能够从“GuestHostTotalList”跳转到ViewModel DataContext。

请找我解决了类似的问题在这里: EventTrigger not working inside ItemsControl in MVVM

通过使用您可以从“GuestHostTotalList”范围内跳转到视图模型背景下,将能够绑定“SubGridItemList”的DataContextProxy类:{绑定DataSource.SubGridItemList,源= {StaticResource DataContextProxy}

相关问题