2010-08-12 57 views
2

我有一个由BusyIndi​​cator包装的ListBox。 ListBox很沉重,有时可能需要4或5秒才能渲染。Silverlight - 当ListBox使用BusyIndi​​cator呈现时屏蔽屏幕

我不知道什么是在ListBox呈现时使用BusyIndi​​cator阻止UI的最佳方式?

编辑:对不起,我没有让我的问题很清楚...请注意,ListBox的ItemsSource绑定到视图模型中的ObservabaleCollection。这个收集是快速填充。我猜想,真正拖慢所有事情的是UI渲染,因为ListBox包含了非常复杂的自定义ListBoxItems。

另外ListBox的ItemsPanel是一个WrapPanel。它不像默认的VirtualisingStackPanel,所以我猜这可能是一个ListBox性能问题?

回答

1

这基本上是你如何做到的。

XAML文件

<toolkit:BusyIndicator HorizontalAlignment="Left" VerticalAlignment="Top" 
    x:Name="m_BusyIndicator"> 
    <ListBox Width="200" Height="300" x:Name="m_ListBox"/> 
</toolkit:BusyIndicator> 

CS文件

public MainPage() 
{ 
    // Required to initialize variables 
    InitializeComponent(); 
    InitializeListBox(); 
} 

private void InitializeListBox() 
{ 
    m_BusyIndicator.IsBusy = true; 
    m_ListBox.ItemsSource = null; // Load your data (mayby async) when done call OnListBoxItemsLoaded() 
} 

private void OnListBoxItemsLoaded() 
{ 
    m_BusyIndicator.IsBusy = false; 
} 
+0

我不认为它是减慢速度的ItemsSource。请参考我调整后的问题。谢谢。 :) – 2010-08-12 23:45:30

0

如果你不想使用该工具包可以用我这个问题的答案:

WPF - Loading image to show page loading status

+0

感谢这一点,但在我的情况下,我不得不使用这个BusyIndi​​cator。 :( – 2010-08-12 23:40:40

0

如果你想锁定整个用户界面,那么你需要包装整个控件layoutroot nt与忙指标。

+0

我有BusyIndi​​cator作为我的根元素。 – 2010-08-12 23:40:16

相关问题