Wenn das Hauptfenster - nur meine DataGrid
zeigt, zeigt die DataGrid
null Zeilen. DieseWarum zeigt mein DataGrid keine Zeilen an, wenn Elemente in der gebundenen Datenquelle enthalten sind?
ist, was mein Gitter aussieht:
<DataGrid
AutoGenerateColumns="True"
CanUserAddRows="False"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
DataContext="ClientListViewModel"
ItemsSource="{Binding Source=RowItems}">
<DataGrid.Columns>
<DataGridTextColumn Header="Given Name" Binding="{Binding GivenName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Family Name" Binding="{Binding FamilyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Gender" Binding="{Binding Gender, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Date of Birth" Binding="{Binding DateOfBirth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Im Source={Binding Source=RowItems}
die Quelle eine Eigenschaft ist, RowItems
auf meinem Haupt-View-Modell, ClientListViewModel
.
Das Viewmodel hat eine Read
Methode in der Ctor ClientListView
, meine Hauptansicht genannt. Wenn ich dieses Problem debuggen kann, kann ich sehen, dass die Artikelquelle RowItems
korrekt ausgefüllt ist.
Meine Initialisierung der Hauptansicht, die UserControl
die DataGrid
in Frage kommenden sieht, wie folgt aus:
public MainWindow()
{
InitializeComponent();
InitializeListView();
}
private void InitializeListView()
{
var model = new ClientListViewModel();
model.Read();
var view = new ClientListView();
view.DataContext = model;
Content = view;
}
Als ich nach model.Read();
gerade einen Haltepunkt setzen, seine model.RowItems
Eigenschaft zeigt 12 Artikel, noch die DataGrid
Shows keine Zeilen.
Warum ist meine DataGrid
rendering null Zeilen?
Wenn Sie '{Binding Source = RowItems}' verwenden, sind Sie nicht an eine 'RowItems' -Eigenschaft des' DataContext' gebunden, aber eher auf das gesamte bindende Quellobjekt, das Sie explizit setzen und in diesem speziellen Fall in eine Zeichenkette "RowItems" aufgelöst wird (beachten Sie, dass es 8 Buchstaben hat). Sie sollten 'Pfad' anstelle von' Quelle' in Ihrer Bindung, d. H. '{Binding Path = RowItems}' oder '{Binding RowItems}' kurz setzen. – Grx70
@ Grx70 Danke, aber ich habe jetzt null Zeilen. Wenn ich Maus über die 'RowItems' in' ItemsSource = "{Binding Path = RowItems}" 'es zeigt mir, dass diese Liste Eigenschaft hat 12 Elemente, noch keine Zeilen! – ProfK
Das liegt daran, dass Sie 'DataGrid.DataContext =" ClientListViewModel "' explizit gesetzt haben, was wiederum zu einem String "ClientListViewModel" 'führt, der keine Eigenschaft namens' RowItems' hat. Wenn Ihr 'DataGrid' Teil Ihrer' ClientListView' ist, können Sie die Einstellung 'DataGrid.DataContext' komplett überspringen (standardmäßig wird es von' ClientListView' geerbt). Andernfalls sollten Sie wahrscheinlich eine korrekte Bindung verwenden, die zu einer Instanz von 'ClientListViewModel' aufgelöst werden würde. Ich empfehle Ihnen, den Artikel [Datenbindungsübersicht] (https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-binding-overview) zu besuchen. – Grx70