2017-09-20 10 views
0

J'ai une popup qui est montrée sur chaque rangée et quand je clique sur cette fenêtre elle devrait montrer plus de détails de la rangée choisie. J'ai été en mesure d'obtenir des valeurs de ligne sélectionnée, mais je suis incapable de les lier aux contrôles popupbox.Transmettre la valeur de la ligne sélectionnée de la grille de données à la boîte contextuelle

<DataGrid x:Name="CRDataGrid" AutoGenerateColumns="False" SelectionMode="Single" SelectedItem="{Binding SelectedCR}" FontSize="14" CanUserAddRows="False" ItemsSource="{Binding crentities}" 
CanUserDeleteRows="False" md:DataGridAssist.ColumnHeaderPadding="4" md:DataGridAssist.CellPadding="4" SelectionUnit="FullRow" MouseDoubleClick="DataGrid_MouseDoubleClick" RowDetailsVisibilityMode="VisibleWhenSelected" HeadersVisibility="All" Grid.ColumnSpan="2" Grid.Row="1" Margin="20" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Title" IsReadOnly="True" Binding="{Binding LogName}" Width="80" /> 
     <DataGridTextColumn Header="MUIdentifier" IsReadOnly="True" Binding="{Binding MU_Identifier}" Width="100" /> 
     <DataGridTextColumn Header="Status" IsReadOnly="True" Binding="{Binding Status}" Width="80" /> 
     <DataGridTextColumn Header="RequestType" IsReadOnly="True" Binding="{Binding RequestType}" Width="100" /> 
     <DataGridTextColumn Header="DateTime" IsReadOnly="True" Binding="{Binding Create_Date,TargetNullValue='-'}" Width="100" /> 
     <DataGridTextColumn Header="SoftwareVersion" IsReadOnly="True" Binding="{Binding SW_Version}" Width="200" /> 
     <DataGridTemplateColumn > 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <md:PopupBox DockPanel.Dock="Right" PlacementMode="BottomAndAlignRightEdges" StaysOpen="True"> 
         <md:PopupBox.ToggleContent> 
          <md:PackIcon Kind="DotsHorizontal" Margin="4 0 4 0" Width="24" Height="24" 
           Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=md:PopupBox}, Path=Foreground}" /> 
         </md:PopupBox.ToggleContent> 
         <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding ElementName=CRDataGrid, Path= SelectedCR.MU_Identifier}" /> 
        </md:PopupBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Les fenêtres contextuelles ne sont généralement pas dans le même VisualTree que les éléments sont placés, de sorte que le RelativeSource ne trouve rien. Si vous voulez utiliser les données de leur parent (apparent), vous devez naviguer dans votre liaison via 'PlacementTarget' (ou quel que soit son nom dans votre implémentation spécifique - btw, ne semble pas stocké, lequel utilisez-vous?). –

+0

J'utilise materialdesign popupbox et c'est l'espace de noms xmlns: md = "http://materialdesigninxaml.net/winfx/xaml/themes", je vais vérifier la cible de placement –

Répondre

1

Ne devrait pas

<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding ElementName=CRDataGrid, Path= SelectedCR.MU_Identifier}" /> 

plutôt être

<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding ElementName=CRDataGrid, Path= SelectedItem.MU_Identifier}" /> 

?

+0

Cela a fonctionné génial, cela reflète également dans mon viewmodel. J'ai donc appris si nous sommes liés par le nom des éléments que nous devrions utiliser les balises de cet élément à lier. –