as indicated in the header, I get terrible performance if I use ListViewwith nested objects. My scenario: Each line ListViewrepresents a class object Transactionwith the following attributes:
private int mTransactionID;
private IBTTransactionSender mSender;
private IBTTransactionReceiver mReceiver;
private BTSubstrate mSubstrate;
private double mAmount;
private string mDeliveryNote;
private string mNote;
private DateTime mTransactionDate;
private DateTime mCreationTimestamp;
private BTEmployee mEmployee;
private bool mImported;
private bool mDescendedFromRecurringTransaction;
Each attribute can have access to its corresponding property. ObservableCollection<Transaction>tied to ItemsSourcea ListView. Itself ListViewlooks like this:
</ListView.GroupStyle>
<ListView.View>
<GridView>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.ToSave" Width="80">
<GridViewColumnHeader Name="GVCHLoadedToSave" Style="{StaticResource ListViewHeaderStyle}">Speichern</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<CheckBox Name="CBListViewItem" IsChecked="{Binding Path=Transaction.ToSave, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></CheckBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.TransactionDate" Width="80">
<GridViewColumnHeader Name="GVCHLoadedDate" Style="{StaticResource ListViewHeaderStyle}">Datum</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding ElementName=DPDate, Path=Text}" Style="{StaticResource GridBlockStyle}"/>
<toolkit:DatePicker Name="DPDate"
Width="{Binding ElementName=GVCHDate, Path=ActualWidth}"
SelectedDateFormat="Short"
Style="{StaticResource GridEditStyle}"
SelectedDate="{Binding Path=Transaction.TransactionDate, Mode=TwoWay}"
SelectedDateChanged="DPDate_SelectedDateChanged"/>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Sender.Description" Width="120">
<GridViewColumnHeader Name="GVCHLoadedSender" Style="{StaticResource ListViewHeaderStyle}">Von</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Sender.Description}" Style="{StaticResource GridBlockStyle}"/>
<ComboBox Name="CBSender"
Width="{Binding ElementName=GVCHSender, Path=ActualWidth}"
SelectedItem="{Binding Path=Transaction.Sender}"
DisplayMemberPath="Description"
Text="{Binding Path=Sender.Description, Mode=OneWay}"
ItemsSource="{Binding ElementName=Transaction, Path=SenderList}"
Style="{StaticResource GridEditStyle}">
</ComboBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Receiver.Description" Width="120">
<GridViewColumnHeader Name="GVCHLoadedReceiver" Style="{StaticResource ListViewHeaderStyle}">Nach</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Receiver.Description}" Style="{StaticResource GridBlockStyle}"/>
<ComboBox Name="CBReceiver"
Width="{Binding ElementName=GVCHReceiver, Path=ActualWidth}"
SelectedItem="{Binding Path=Transaction.Receiver}"
DisplayMemberPath="Description"
Text="{Binding Path=Receiver.Description, Mode=OneWay}"
ItemsSource="{Binding ElementName=Transaction, Path=ReceiverList}"
Style="{StaticResource GridEditStyle}">
</ComboBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Substrate.Description" Width="140">
<GridViewColumnHeader Name="GVCHLoadedSubstrate" Style="{StaticResource ListViewHeaderStyle}">Substrat</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Substrate.Description}" Style="{StaticResource GridBlockStyle}"/>
<ComboBox Name="CBSubstrate"
Width="{Binding ElementName=GVCHSubstrate, Path=ActualWidth}"
SelectedItem="{Binding Path=Transaction.Substrate}"
DisplayMemberPath="Description"
Text="{Binding Path=Substrate.Description, Mode=OneWay}"
ItemsSource="{Binding ElementName=Transaction, Path=SubstrateList}"
Style="{StaticResource GridEditStyle}">
</ComboBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Amount" Width="80">
<GridViewColumnHeader Name="GVCHLoadedAmount" Style="{StaticResource ListViewHeaderStyle}">Menge [kg]</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Amount}" Style="{StaticResource GridBlockStyle}"/>
<TextBox Name="TBAmount" Text="{Binding Path=Transaction.Amount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ElementName=GVCHAmount, Path=ActualWidth}" Style="{StaticResource GridTextBoxStyle}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.DeliveryNote" Width="100">
<GridViewColumnHeader Name="GVCHLoadedDeliveryNote" Style="{StaticResource ListViewHeaderStyle}">Lieferschein Nr.</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.DeliveryNote}" Style="{StaticResource GridBlockStyle}"/>
<TextBox Name="TBDeliveryNote" Text="{Binding Path=Transaction.DeliveryNote, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ElementName=GVCHDeliveryNote, Path=ActualWidth}" Style="{StaticResource GridEditStyle}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Note" Width="190">
<GridViewColumnHeader Name="GVCHLoadedNote" Style="{StaticResource ListViewHeaderStyle}">Bemerkung</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Note}" Style="{StaticResource GridBlockStyle}"/>
<TextBox Name="TBNote" Text="{Binding Path=Transaction.Note, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ElementName=GVCHNote, Path=ActualWidth}" Style="{StaticResource GridEditStyle}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn core:SortableListView.SortPropertyName="Transaction.Employee.LastName" Width="100">
<GridViewColumnHeader Name="GVCHLoadedEmployee" Style="{StaticResource ListViewHeaderStyle}">Mitarbeiter</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=Transaction.Employee.LastName}" Style="{StaticResource GridBlockStyle}"/>
<ComboBox Name="CBEmployee"
Width="{Binding ElementName=GVCHEmployee, Path=ActualWidth}"
SelectedItem="{Binding Path=Transaction.Employee}"
DisplayMemberPath="LastName"
Text="{Binding Path=Employee.LastName, Mode=OneWay}"
ItemsSource="{Binding ElementName=Transaction, Path=EmployeeList}"
Style="{StaticResource GridEditStyle}">
</ComboBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
As you can see in the screenshot , the user got the opportunity to change the values of transaction attributes using ComboBoxes.
, . "", 150 ObservableCollection<Transaction>. , ItemsSource ListView null, ItemsSource. , (150 = 20 ). , Comboboxes xaml, , Comboboxes . comboboxes Transaction.
- , ?