Je crée une fenêtre WPF avec un Je ne peux pas comprendre pourquoi la ligne vierge ne s'affiche pas. J'ai essayé le matériel évident ( DataGrid code>, et je veux afficher la ligne "Nouvel élément" vide au bas de la grille qui me permet d'ajouter un nouvel élément à la grille. Pour une raison quelconque, la ligne vierge n'est pas représentée sur la grille sur ma fenêtre. Voici le balisage que j'ai utilisé pour créer le
DataGrid code>:
isreadonly = "false" code>,
canaseraddrows = "vrai" code>), sans chance. Une idée de la raison pour laquelle la ligne vierge est désactivée? Merci pour votre aide. P> p>
7 Réponses :
Vincent Sibal a posté un Article décrivant ce qui est requis pour ajouter de nouvelles lignes à un DataGrid . Il existe différentes possibilités et la majeure partie de celle-ci dépend du type de collection que vous utilisez pour Je recommanderais de vous assurer que "tâches" n'est pas une collection en lecture seule et qu'elle prend en charge l'une des interfaces requises (mentionnée dans le lien précédent) pour permettre à de nouveaux éléments d'être ajoutés correctement avec DataGrid. P> sélectionnéproject.tasks code>. P>
En réalité, les tâches sont une observablecollection
Merci beaucoup qui a été utile. Sincèrement.
a finalement revenu celui-ci. Je ne vais pas changer la réponse acceptée (coche verte), mais voici la cause du problème:
My View Model Wraps Classes de domaine pour fournir une infrastructure nécessaire par WPF. J'ai écrit un Article de codeProject sur la méthode wrap que j'utilise , qui comprend une classe de collecte qui a deux paramètres de type: p> où dm em> est une classe de domaine emballée et dm em > Est-ce que la classe WPF qui l'enveloppe. p> Il orthographique que, pour une raison quelconque étrange, le deuxième paramètre de type dans la classe de collecte provoque le DataGrid WPF de devenir un éventail. Le correctif consiste à éliminer le paramètre de deuxième type. P> ne peut pas dire pourquoi cela fonctionne, seulement que cela fait. J'espère que cela aide quelqu'un d'autre sur la route. P> p>
Vous devez également avoir un constructeur par défaut sur le type de la collection. P>
C'est la réponse qui aurait dû être vérifiée>.
Oui, c'est la réponse du même problème que j'avais.
Et si la collection est d'un type d'interface?
Cette réponse correcte m'a raté, car il est sur le bas sans code.
Il convient également de noter que le constructeur doit être
Observablecollection
public code>. Il semble que le datagrid ne considère pas
interne code> ou
des constructeurs privés code>.
Ajoutez un élément vide à vos itemsSource, puis supprimez-le. Vous devrez peut-être régler CaneserAjouter à TRUE après cela. J'ai lu cette solution ici : (Postes de Jarrey et Rick Roen) P>
J'ai eu ce problème lorsque je définirai l'itemSource vers une Vieille default de DataTable et la vue était vide. Les colonnes ont été définies cependant, cela aurait dû être capable de les obtenir. Heh. P>
Pouah. Merci. Cela m'a conduit absolument fou. J'ai finalement abandonné des entités et j'ai déménagé sur des jeux de données typés et même que i> a échoué. L'astuce est de Attribuer i> la collection d'abord et alors i> le manipuler en ajoutant et en supprimant un objet.
À mon avis, il s'agit d'un bogue dans la DataGrid. Le lien de Mike Blandford m'a aidé Pour enfin se rendre compte de ce que le problème est le suivant: le datagrid ne reconnaît pas le type des lignes jusqu'à ce qu'il ait un objet réel lié. La ligne Edition n'apparaît pas B / C La grille de données ne connaît pas les types de colonne. Vous penseriez que la liaison d'une collection fortement dactylographiée fonctionnerait, mais ce ne serait pas.
Pour développer la réponse de Mike Blandford, vous devez d'abord attribuer la collection vide, puis ajouter et supprimer une ligne. Par exemple, P>
private void Window_Loaded(object sender, RoutedEventArgs e) { // data binding dataGridUsers.ItemsSource = GetMembershipUsers(); EntRefUserDataSet.EntRefUserDataTable dt = (EntRefUserDataSet.EntRefUserDataTable)dataGridUsers.ItemsSource; // hack to force edit row to appear for empty collections if (dt.Rows.Count == 0) { dt.AddEntRefUserRow("", "", false, false); dt.Rows[0].Delete(); } }
Pour moi, le meilleur moyen d'implémenter asynchrone modifiable Voir modèle: strong> p> datagrid code> ressemble à celui:
<UserControl x:Class="UCM.WFDesigner.Views.UserTextMainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:model="clr-namespace:Cellebrite.Diagnostics.Model.Entities;assembly=Cellebrite.Diagnostics.Model"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:converters1="clr-namespace:UCM.Infra.Converters;assembly=UCM.Infra"
xmlns:core="clr-namespace:UCM.WFDesigner.Core"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300">
<DockPanel>
<StackPanel Orientation="Horizontal"
DockPanel.Dock="Top"
HorizontalAlignment="Left">
<DockPanel>
<TextBlock Text="Search:"
DockPanel.Dock="Left"
VerticalAlignment="Center"
FontWeight="Bold"
Margin="0,0,5,0" />
<Button Style="{StaticResource StyleButtonDeleteCommon}"
Height="20"
Width="20"
DockPanel.Dock="Right"
ToolTip="Clear Filter"
Command="{Binding ClearSearchCommand}" />
<TextBox Text="{Binding SearchInput, UpdateSourceTrigger=PropertyChanged}"
Width="500"
VerticalContentAlignment="Center"
Margin="0,0,2,0"
FontSize="13" />
</DockPanel>
</StackPanel>
<Grid>
<DataGrid ItemsSource="{Binding Path=TranslationsView}"
AutoGenerateColumns="False"
SelectionMode="Single"
CanUserAddRows="True">
<DataGrid.Columns>
<!-- your columns definition is here-->
</DataGrid.Columns>
</DataGrid>
<!-- your "busy indicator", that shows to user a message instead of stuck data grid-->
<Border Visibility="{Binding IsBusy,Converter={converters1:BooleanToSomethingConverter TrueValue='Visible', FalseValue='Collapsed'}}"
Background="#50000000">
<TextBlock Foreground="White"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="Loading. . ."
FontSize="16" />
</Border>
</Grid>
</DockPanel>
Cela me suis arrêté, j'ai oublié de nouveau dans l'instance et c'était un cauchemar pour moi. Une fois que j'ai créé une instance de la collection dans OnSIPLOa chargé, elle a été résolue. Ceci a résolu mon problème. J'espère que cela peut aider les autres p> p>