次のコードは、2番目のコンボボックスでパフォーマンスの問題があります。最初のコンボボックスを変更して2番目のコンボボックスを開いたときに、それが正常です。私は....WPFネストされたリストのパフォーマンスの問題
公共部分クラスのメインウィンドウ二度目の最初COMBOXを変更し、それがパフォーマンスの問題の多くを持っている 二COMBOXボックスを開くしようとした場合でも:ウィンドウを、 は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