using System;
using System.Windows;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
namespace DataGridTest5
{
///
/// Test case for sort issue in DataGrid
/// a) Viewing:
/// - start the application, the first level is shown automatically
/// -> the sort order is OK
/// - select level "Second"
/// - select level "First"
/// -> the sort order is not correct anymore
/// b) Editing:
/// - start the application, the first level is shown automatically
/// -> the sort order is OK
/// - edit names
/// -> the DataGrid elements are sorted after each modification
/// - select level "Second"
/// - select level "First"
/// -> the sort order is not correct anymore
/// - edit names
/// -> the DataGrid elements are not sorted, they stay at the same position
///
public partial class MainWindow : Window
{
ObservableCollection levels;
public MainWindow()
{
InitializeComponent();
lstLevel.Loaded += new RoutedEventHandler(lstLevel_Loaded);
levels = new ObservableCollection {
new Level {
Name = "First",
Players = new ObservableCollection {
new User { Name = "Teddy", Age = "2" },
new User { Name = "Avi", Age = "19" },
new User { Name = "Mayia", Age = "30" },
},
},
new Level {
Name = "Second",
Players = new ObservableCollection {
new User { Name = "Brian", Age = "20" },
new User { Name = "Snoopy", Age = "4" }
}
}
};
lstLevel.ItemsSource = levels;
}
void lstLevel_Loaded(object sender, RoutedEventArgs e)
{
lstLevel.Focus();
var item = lstLevel.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
if (item != null)
FocusManager.SetFocusedElement(this, item);
}
}
///
/// Level class, items shown in the ListBox.
///
public class Level : INotifyPropertyChanged
{
string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
ObservableCollection players;
public ObservableCollection Players
{
get { return players; }
set
{
players = value;
OnPropertyChanged(new PropertyChangedEventArgs("Players"));
}
}
public Level()
{
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
#endregion
}
///
/// User class, items shown in the DataGrid.
///
public class User : INotifyPropertyChanged
{
string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
String age;
public string Age
{
get { return age; }
set
{
age = value;
OnPropertyChanged(new PropertyChangedEventArgs("Age"));
}
}
public User()
{
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
#endregion
}
}