سؤال

لدي تطبيق Windows Forms، يحتوي على ElementHost واحد يحتوي على WPF UserControl...في WPF الخاص بي، لدي ListView بسيط جدًا:

<ListView Margin="4" ItemsSource="{Binding Notifications}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" />
            <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" />
            <GridViewColumn Header="Address" DisplayMemberBinding="{Binding Address}" />
            <GridViewColumn Header="City" DisplayMemberBinding="{Binding City}" />
            <GridViewColumn Header="State" DisplayMemberBinding="{Binding State}" />
            <GridViewColumn Header="Zip" DisplayMemberBinding="{Binding Zip}" />
        </GridView>
    </ListView.View>
</ListView>

إذا كان المصدر يحتوي على 10 عناصر، فسيتم تحميل النموذج في أقل من ثانية واحدة.إذا كان المصدر الخاص بي يحتوي على 1000 عنصر، فسيستغرق ذلك 7 ثوانٍ!!!مؤقتي يأخذ في الاعتبار التحميل فقط (وليس مقدار الوقت المستغرق للحصول على العناصر).

لذلك سؤالي هو:

هل يعد استخدام ElementHost كابوسًا للأداء؟

هل يعتبر WPF DataBinding كابوسًا للأداء؟

هل ListView قطعة من حماقة؟(راجع للشغل، نفس النتائج مع DataGrid WPToolkit)؟

هل كانت مفيدة؟

المحلول

استخدم الافتراضية

<ListView ItemsSource="{BindingNames}"Name="lv">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                   <!--<StackPanel/>
                    If StackPanel was used, the memory consumed was over 2GB and dead slow.
                    -->
                   <VirtualizingStackPanel>
                    <!--Memory footprint is only 200 mb-->
                    </VirtualizingStackPanel>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView> 

نصائح أخرى

وأنت قد تحتاج أيضا إلى التحقق من هذه المادة ممتازة على مشروع الرمز:

وWPF: الافتراضية البيانات بول ماكلين http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx

وأن تظهر لك طريقة أفضل بكثير في الحد الأدنى من الذاكرة واستخدام عرض النطاق الترددي.

كانت لدي حالة لم تحل فيها الإجابات المقدمة هنا مشكلتي.في حالتي، إعداد MaxHeight ملكية ListView إلى قيمة أكبر من الارتفاع الفعلي المعروض تم حلها على الفور، وذلك بفضل هذه الإجابة هنا, ، حتى لو لم أتمكن من شرح كيف ولماذا نجح الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top