myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Code-Reviews » ListBox mit Elementen in ListBox mit Elementen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

ListBox mit Elementen in ListBox mit Elementen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Sec
myCSharp.de-Mitglied

Dabei seit: 25.02.2015
Beiträge: 3


Sec ist offline

ListBox mit Elementen in ListBox mit Elementen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top


mycsharp.de  Moderationshinweis von Coffeebean (26.02.2015 18:08):

Projekt entfernt.  [Hinweis] Wie poste ich richtig? Punkt 4.1
 

Hallo Jungs,

ich habe folgendes Problem


ich habe eine ListView mit Elementen in der sich innerhalb einer Listview mit weiteren Elementen befindet.... Ähnlich einer Tabelle..

Mein Testprojekt läuft sehr sehr langsam / benötigt zu lange zum Laden...
Egal was ich versuche es wird nicht schneller....Sind es zu viele Elemente und WPF bekommt das nicht hin? Kann doch nicht sein oder.

Habe das Projekt mit hochgeladen.(Testprojekt und sehr einfach gehalten, hoffe ich...)

Kann mir einer helfen, bin blutiger Anfänger und mein erster Post :)

Gruß

XML-Code:
<Grid>
        <ListBox x:Name="LB_complete" ScrollViewer.CanContentScroll="False" >
            <ListBox.Style>
                <Style TargetType="{x:Type ListBox}">
                    <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue" />
                </Style>
            </ListBox.Style>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Margin="1" BorderBrush="SteelBlue" BorderThickness="1">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="250"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <Border Grid.Column="0" Margin="1,0,1,0" BorderThickness="1">
                                <Border.Style>
                                    <Style TargetType="{x:Type Border}">
                                        <Setter Property="Background" Value="SteelBlue"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding ="{Binding Path=IsHeader}" Value="true">
                                                <Setter Property="Background" Value="Orange"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Border.Style>

                                <TextBlock Margin="10,6,10,6" Text="{Binding Name}" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="14" FontWeight="Normal" Foreground="White" ToolTip="RessourcenkarteZeile"/>

                            </Border>

                            <Border Grid.Column="1" Margin="1,0,1,0" BorderThickness="1" Background="SteelBlue">
                                <Border.Style>
                                    <Style TargetType="{x:Type Border}">
                                        <Setter Property="Visibility" Value="Visible"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding ="{Binding Path=IsHeader}" Value="true">
                                                <Setter Property="Visibility" Value="Collapsed"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Border.Style>
                                <ListBox HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding CounterList}" Background="SteelBlue" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">

                                    <ListBox.Style>
                                        <Style TargetType="{x:Type ListBox}">
                                            <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue" />
                                        </Style>
                                    </ListBox.Style>

                                    <ListBox.ItemContainerStyle>
                                        <Style TargetType="ListBoxItem">
                                            <Style.Setters>
                                                <Setter Property="Focusable" Value="False"/>
                                            </Style.Setters>

                                            <Style.Triggers>
                                                <Trigger Property="IsKeyboardFocusWithin" Value="true">
                                                    <Setter Property="IsSelected" Value="true" />
                                                </Trigger>
                                            </Style.Triggers>
                                        </Style>
                                    </ListBox.ItemContainerStyle>
                                    <ListBox.ItemTemplate>
                                        <DataTemplate >
                                            <Grid HorizontalAlignment="Center">
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="22" />
                                                    <RowDefinition Height="22"/>
                                                </Grid.RowDefinitions>
                                                <TextBlock Width="30" Grid.Row="0"  HorizontalAlignment="Center" Text="{Binding Counter}" FontSize="10" FontWeight="Normal" Foreground="White" VerticalAlignment="Center">
                                                    <TextBlock.Style>
                                                        <Style TargetType="{x:Type TextBlock}">
                                                            <Style.Triggers>
                                                                <DataTrigger Binding ="{Binding Path=Value}" Value="0">
                                                                    <Setter Property="Background" Value="Gray"/>
                                                                </DataTrigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </TextBlock.Style>
                                                </TextBlock>
                                                <TextBox   Width="30" Grid.Row="1"  HorizontalAlignment="Center" x:Name="Element" Text="{Binding Value}" GotKeyboardFocus="Test" VerticalAlignment="Center"/>
                                            </Grid>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>

                                    <ListBox.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <VirtualizingStackPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
                                        </ItemsPanelTemplate>
                                    </ListBox.ItemsPanel>
                                </ListBox>
                            </Border>
                        </Grid>
                    </Border>

                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

C#-Code:
public partial class MainWindow : Window
    {
        internal List<Row> ZeilenListe { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            buildList();
        }

        private void buildList()
        {
            ZeilenListe = new List<Row>();
            for (int i = 0; i < 40; i++)
            {
                string tmpzeileName = "ZeileName_" + i.ToString();

                List<CounterElement> sl = new List<CounterElement>();
                if (i != 0)
                {
                    for (int j = 0; j < 100; j++)
                    {
                        CounterElement tmpelement = new CounterElement(j);
                        sl.Add(tmpelement);
                    }
                }

                Row tmpZeile = null;
                if(i == 0)
                    tmpZeile = new Row(tmpzeileName, true, sl);
                else
                    tmpZeile = new Row(tmpzeileName, false, sl);

                ZeilenListe.Add(tmpZeile);
            }

            LB_complete.ItemsSource = ZeilenListe;
        }

        private void Test(object sender, KeyboardFocusChangedEventArgs e)
        {
            (sender as TextBox).SelectAll();
        }

    }

    class CounterElement
    {
        public int Counter  { get; set; }
        public double Value     { get; set; }


        //  Konstruktor
        public CounterElement()
        {
            Counter = 0;
            Value = 0;
        }
        public CounterElement(int Counter)
        {
            this.Counter = Counter;
            Value = 0;
        }
    }

    class Row
    {
        public string Name                { get; set; }
        public List<CounterElement> CounterList     { get; set; }
        public bool IsHeader { get; set; }

        public Row(string Zeile, bool Header,  List<CounterElement> liste)
        {
            this.Name = Zeile;
            this.CounterList  = liste;
            IsHeader        = Header;
        }

    }
Neuer Beitrag 26.02.2015 16:55 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.961
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der erste Post befreit Dich nicht von den Forenregeln, die Du sicherlich gelesen, da akzeptiert hast.
 [Hinweis] Wie poste ich richtig?
Trotzdem willkommen.

Mit Hilfe des  [Artikel] Debugger: Wie verwende ich den von Visual Studio? kannst Du analysieren, welche Elemente denn besonders langsam sind, sodass Du die ganze Arbeit nicht auf die freiwilligen Helfer abwälzt.
Wenn Du mehr Informationen lieferst ist die Wahrscheinlichkeit auch größer, dass Du Hilfe bekommst.
Neuer Beitrag 26.02.2015 16:58 Beiträge des Benutzers | zu Buddylist hinzufügen
Sec
myCSharp.de-Mitglied

Dabei seit: 25.02.2015
Beiträge: 3

Themenstarter Thema begonnen von Sec

Sec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

meines Wissen kann ich den XAML Code doch nicht debuggen?!

Der Code-Behind ist nicht das Problem, dieser läuft schnell genug.
Brauch keine Code-Lösung, möchte nur wissen warum es solange benötigt und wie ich es schneller bekomme...

danke, Gruß
Neuer Beitrag 26.02.2015 17:12 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.961
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Microsoft bietet zahlreiche Tools fuer die Analyse von XAML Performance, zB XAML UI Responsiveness Tool, XAML Performance Explorer......
Neuer Beitrag 26.02.2015 17:48 Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.201
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Sec,

mal ganz abgesehen davon, dass du kein MVVM und sowas verwendest...

Du lädst 39 x 100 Eingabefelder. Das sind 3900 Eingabefelder. Auf einen Schlag. Jeder normale Mensch würde das Programm so "schnell" wieder zumachen, wie es aufgegangen ist.
Die werden auch noch im UI-Thread generiert.

Kannst du nicht anzeigen, was gerade gebraucht wird?

Gruss

Coffeebean
Neuer Beitrag 26.02.2015 18:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Sec
myCSharp.de-Mitglied

Dabei seit: 25.02.2015
Beiträge: 3

Themenstarter Thema begonnen von Sec

Sec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Coffeebean,

ja 3900 Eingabefelder sind viel, aber diese sind notwendig :(

wäre eine Aufteilung möglich, hätte ich dies bereits versucht um das Programm zu beschleunigen...

Hast du eine Idee trotz der vielen Eingabefelder?

Danke & Gruß
Neuer Beitrag 27.02.2015 15:22 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.404
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Sec,

Zitat von Sec:
Hast du eine Idee trotz der vielen Eingabefelder?

Kommt doch ganz auf deine Anforderungen an, aber darüber hast du ja nichts geschrieben. Evtl. tut es ja ein einfacher DataGridView*.

Christian


* Korrigert, danke für den Hinweis, BeZi.
Neuer Beitrag 27.02.2015 15:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Palin Palin ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.08.2011
Beiträge: 1.090
Entwicklungsumgebung: VB.net


Palin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich halte da ein DataGridView auch für Besser und denke auch das es Grundlegend die vielen Elemente sind die das Problem verursachen.

Hier mal ein Artikel der einiges zu Performance Problemen bei WPF abhandelt.
 CodeProjekt:Solutions for WPF Performance Issue

Was mir direkt ins Auge gesprungen ist, ist die Prüfung auf i==0 8 (bzw. != ) in der Schleife. Setzt den Sonderfall vor die Schleife und lass die Schleife bei 1 Starten. Macht auch den Code besser Lesbar.
Neuer Beitrag 27.02.2015 16:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BeZi
myCSharp.de-Mitglied

Dabei seit: 09.12.2007
Beiträge: 153


BeZi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

DataGridView in WPF ???
Neuer Beitrag 28.02.2015 12:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 5 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 11.07.2020 19:54