重新編碼的步驟:爲什麼我的combobox在itemssource更改時會凍結?
當應用程序啓動時,打開組合框,以便生成項目。現在點擊「Click Me!」按鈕。在後面的代碼中,組合框的itemssource被改變。現在嘗試再次打開組合框。即使綁定集合中只有2個項目,組合框也會凍結至少5秒。這只是一個測試應用程序。在我的實際應用中,有超過2個項目,滯後是無法忍受的。我已經通過虛擬化開啓和關閉了。沒什麼區別。
需要這麼長時間?我該如何解決?如果沒有直接的解決方法,是否有解決方法?
XAML:
<StackPanel>
<ComboBox x:Name="cbo" DisplayMemberPath="Junk1"></ComboBox>
<Button Content="Click Me!" Click="btn_Click"></Button>
</StackPanel>
CODE:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
ObservableCollection<Junk> junk1 = new ObservableCollection<Junk>() {
new Junk() { Junk1 = "jdkf", Junk2 = "fjdfkasjd;klfj" },
new Junk() { Junk1 = "jfdk;a", Junk2 = "fjkdljf" } };
ObservableCollection<Junk> junk2 = new ObservableCollection<Junk>() {
new Junk() { Junk1 = "fjkdfhsdjk", Junk2 = "fdjkah;" },
new Junk() { Junk1="", Junk2 = "asdfj" } };
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.cbo.ItemsSource = junk1;
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (this.cbo.ItemsSource == junk1)
this.cbo.ItemsSource = junk2;
else
this.cbo.ItemsSource = junk1;
this.cbo.UpdateLayout();
}
}
public class Junk
{
public string Junk1 { get; set; }
public string Junk2 { get; set; }
}
你有,當你點擊這個組合框(而不是當你加載它)是可以發射過任何其他活動。 – 2010-11-24 19:45:43
爲什麼要改變ItemsSource而不是改變ObservableCollection本身的項目?此外,垃圾不是從任何UI表示正確派生的?這只是一個標準的課程? – 2010-11-24 19:55:11