下面的代碼有第二個組合框的性能問題......當我改變第一個combox然後打開第二個combox時它是好的。但是,如果我改變了第二次的第一COMBOX並嘗試打開它有很多性能問題的 第二COMBOX箱....WPF嵌套列表性能問題
公共部分類主窗口:窗口, INotifyPropertyChanged的 {
public MainWindow()
{
InitializeComponent();
Books = new List<Book>();
Books.Add(new Book("Abc"));
Books.Add(new Book("Cde"));
Books.Add(new Book("Xyz"));
Books.Add(new Book("Min"));
this.DataContext = this;
SelectedBook = Books[0];
}
Book _selctedBook;
public Book SelectedBook
{
get { return _selctedBook; }
set
{
_selctedBook = value;
raiseChange("SelectedBook");
}
}
List<Book> _books = new List<Book>();
public List<Book> Books { get { return _books; } set { _books = value; raiseChange("Books"); } }
void raiseChange(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class Book : INotifyPropertyChanged
{
public string Name { get; set; }
public ObservableCollection<BookType> BookTypes { get; set; }
BookType _selectedBookType;
public BookType SelectedBookType { get { return _selectedBookType; } set { _selectedBookType = value; raiseChange("SelectedBookType"); } }
public Book(string name)
{
Name = name;
BookTypes = new ObservableCollection<BookType>();
if (name == "Abc")
BookTypes.Add(BookType.Action);
BookTypes.Add(BookType.Comedy);
BookTypes.Add(BookType.Drama);
BookTypes.Add(BookType.Friction);
BookTypes.Add(BookType.Thriller);
SelectedBookType = BookTypes[0];
}
void raiseChange(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public enum BookType
{
Friction,
Drama,
Action,
Thriller,
Comedy,
}
<Grid>
<Grid.Resources>
<DataTemplate x:Key="ItemTemplate2">
<StackPanel>
<TextBlock Text="{Binding .}"/>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<ComboBox Height="23" Name="comboBox1" Grid.Row="0"
SelectedItem="{Binding SelectedBook,Mode=TwoWay}"
ItemsSource="{Binding Books}"
DisplayMemberPath="Name"
Width="386" />
<ComboBox Height="23" Name="comboBox2" Grid.Row="1" DataContext="{Binding SelectedItem, ElementName=comboBox1}"
ItemsSource="{Binding BookTypes}" SelectedItem="{Binding SelectedBookType,Mode=TwoWay}"
Width="386" ItemTemplate="{DynamicResource ItemTemplate2}">
</ComboBox>
</Grid>
+1對於具有一些很好的示例代碼的問題,但是您的示例代碼在我的機器上工作得很好,完全沒有任何性能問題。 – Rachel
運行該應用程序,更改combox 1項目來說,xyz.open combox box 2.現在再次更改combox 1來說Abc並嘗試打開combox 2 ...在下拉打開之前注意一個很大的延遲 – charvind
它工作得很好爲了我。也許在我們的環境中有不同的東西?我正在使用VS2010 Ultimate,.Net Framework 4.0和Windows XP SP3。 – Rachel