WPF DataGrid: Leere Zeile Fehlt
Erstelle ich ein WPF-Fenster mit einem DataGrid
, und ich will zeigen, das leere "neuer Eintrag" Zeile am unteren Rand des Rasters, die mir erlaubt, ein neues Element hinzufügen, um das raster. Für einige Grund, die leere Zeile wird nicht angezeigt auf dem Gitter über meinem Fenster. Hier ist das markup, die ich verwendet, um zu erstellen, die DataGrid
:
<toolkit:DataGrid x:Name="ProjectTasksDataGrid"
DockPanel.Dock="Top"
Style="{DynamicResource {x:Static res:SharedResources.FsBlueGridKey}}"
AutoGenerateColumns="False"
ItemsSource="{Binding SelectedProject.Tasks}"
RowHeaderWidth="0"
MouseMove="OnStartDrag"
DragEnter="OnCheckDropTarget"
DragOver="OnCheckDropTarget"
DragLeave="OnCheckDropTarget"
Drop="OnDrop"
InitializingNewItem="ProjectTasksDataGrid_InitializingNewItem">
<toolkit:DataGrid.Columns>
<toolkit:DataGridCheckBoxColumn HeaderTemplate="{DynamicResource {x:Static res:SharedResources.CheckmarkHeaderKey}}" Width="25" Binding="{Binding Completed}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Days" Width="75" Binding="{Binding NumDays}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Due Date" Width="75" Binding="{Binding DueDate, Converter={StaticResource standardDateConverter}}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description}" IsReadOnly="false"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Ich kann nicht herausfinden, warum die leere Zeile nicht angezeigt. Ich habe versucht, die offensichtlichen Sachen (IsReadOnly="false"
, CanUserAddRows="True"
), ohne Glück. Keine Ahnung warum die leere Zeile deaktiviert ist? Vielen Dank für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vincent Sibal geschrieben ein Artikel beschreibt, was erforderlich ist, für das hinzufügen von neuen Zeilen in einem DataGrid. Es gibt durchaus ein paar Möglichkeiten, und die meisten dieser hängt von der Art der Sammlung, die Sie verwenden für
SelectedProject.Tasks
.Ich würde empfehlen, machen Sie sicher, dass "Aufgaben" ist nicht ein nur-lese-Kollektion, und dass es unterstützt eine der benötigten Schnittstellen (siehe vorherigen link) zu erlauben, neue Elemente Hinzugefügt werden korrekt mit DataGrid.
Müssen Sie auch einen default-Konstruktor für den Typ in der Sammlung.
ObservableCollection<IThing>
Endlich wieder auf diese ein. Ich werde mich nicht ändern, die akzeptierten Antworten (grüner Haken), aber hier ist die Ursache des Problems:
Meiner Ansicht Modell umschließt domain-Klassen, um die Infrastruktur benötigt, die von WPF. Ich schrieb eine CodeProject-Artikel auf der wrap-Methode, die ich verwenden, die enthält eine collection Klasse, die zwei Typ-Parameter:
wo DM ist eine eingewickelte domain-Klasse, und DM wird die WPF-Klasse, wickelt es.
Es schaltet sich heraus, dass bei einigen seltsamen Grund, dass der zweite parameter type in der collection-Klasse bewirkt, dass das WPF-DataGrid zu werden nicht bearbeitet. Das Update ist zu beseitigen, der zweiten Typ-parameter.
Kann nicht sagen, warum das funktioniert, nur, dass es funktioniert. Hoffe es hilft jemand anderes die Straße hinunter.
Meiner Meinung nach ist dies ein Fehler im DataGrid. Mike Blandford link hat mir geholfen, endlich zu erkennen, was das problem ist: Das DataGrid nicht erkennen, die Art der Zeilen, bis es ein reales Objekt gebunden. Die Zeile Bearbeiten nicht angezeigt b/c das Datenblatt kennt nicht die Spaltentypen. Sie würden denken, dass die Bindung einer stark typisierten Auflistung würde funktionieren, aber es funktioniert nicht.
Ausbauen Mike Blandford Antwort, müssen Sie zuerst ordnen Sie die leere Sammlung und dann hinzufügen und entfernen einer Zeile. Zum Beispiel,
Fügt ein leeres Element, um Ihre ItemsSource-und dann entfernen Sie es. Sie haben um CanUserAddRows true zurück, nachdem dies zu tun. Ich lese diese Lösung hier: (Beiträge von Jarrey und Rick Roen)
Hatte ich dieses problem wenn ich die ItemsSource an eine DataTable die Standardansicht und der Ansicht war leer. Die Spalten definiert wurden, obwohl es sollte also in der Lage gewesen, Sie zu bekommen. Heh.
Für mich die beste Art der Umsetzung editierbare asynchrone
DataGrid
so aussieht:View Modell:
XAML:
Dieses Muster ermöglicht das arbeiten mit Daten raster in einer sehr einfachen Art und Weise und code ist sehr einfach entweder.
Vergessen Sie nicht, erstellen von Standard-Konstruktor für die Klasse, die Sie repräsentiert Ihre Datenquelle.
Diese happned zu mir , ich vergaß, die neue Instanz und es war der Horror für mich . sobald ich eine Instanz erstellt, wenn die Kollektion in onviewloaded es gelöst wurde.
dies ist mein problem gelöst. hoffe, es kann anderen helfen,