or
| public static class CollectionSorter |
| { |
| public static void Sort<T>(this ObservableCollection<T> collection, Comparison<T> comparison) |
| { |
| var comparer = new Comparer<T>(comparison); |
| List<T> sorted = collection.OrderBy(x => x, comparer).ToList(); |
| for (int i = 0; i < sorted.Count(); i++) |
| collection.Move(collection.IndexOf(sorted[i]), i); |
| } |
| public static void DescendingSort<T>(this ObservableCollection<T> collection, Comparison<T> comparison) |
| { |
| var comparer = new ReverseComparer<T>(comparison); |
| List<T> sorted = collection.OrderBy(x => x, comparer).ToList(); |
| for (int i = 0; i < sorted.Count(); i++) |
| collection.Move(collection.IndexOf(sorted[i]), i); |
| } |
| } |
| internal class Comparer<T> : IComparer<T> |
| { |
| private readonly Comparison<T> comparison; |
| public Comparer(Comparison<T> comparison) |
| { |
| this.comparison = comparison; |
| } |
| #region IComparer<T> Members |
| public int Compare(T x, T y) |
| { |
| return comparison.Invoke(x, y); |
| } |
| #endregion |
| } |
| internal class ReverseComparer<T> : IComparer<T> |
| { |
| private readonly Comparison<T> comparison; |
| public ReverseComparer(Comparison<T> comparison) |
| { |
| this.comparison = comparison; |
| } |
| #region IComparer<T> Members |
| public int Compare(T x, T y) |
| { |
| return -comparison.Invoke(x, y); |
| } |
| #endregion |
| } |
| private void Log(LogEntry log) |
| { |
| LoggedEvents.Add(log); |
| LoggedEvents.DescendingSort((x, y) => x.TimeStampString.CompareTo(y.TimeStampString)); |
| } |
| private ObservableCollection<LogEntry> entries = new ObservableCollection<LogEntry>(); |
| public ObservableCollection<LogEntry> LoggedEvents |
| { |
| get |
| { |
| return entries; |
| } |
| set |
| { |
| entries = value; |
| RaisePropertyChanged(LoggedProperty); |
| } |
| } |
<telerik:RadDocking Background="#edf3fa" x:Name="dmManager" Grid.Row="1" Margin="0,0,0,33" Padding="0,0,0,0"> <telerik:RadDocking.DocumentHost> <telerik:RadSplitContainer> <telerik:RadPaneGroup> (Assume controls) </telerik:RadPaneGroup> </telerik:RadSplitContainer> </telerik:RadDocking.DocumentHost> <telerik:RadSplitContainer InitialPosition="DockedLeft"> <telerik:RadPaneGroup> (Assume controls) </telerik:RadPaneGroup> </telerik:RadSplitContainer> <telerik:RadSplitContainer InitialPosition="DockedRight"> <telerik:RadPaneGroup> (Assume controls) </telerik:RadPaneGroup> </telerik:RadSplitContainer> <telerik:RadSplitContainer x:Name="Bottom" InitialPosition="DockedBottom"> <telerik:RadPaneGroup> (Assume controls) </telerik:RadPaneGroup> </telerik:RadSplitContainer> </telerik:RadDocking><chartView:LineSeries x:Name="Item1" ItemsSource="{Binding Item[0]}" ValueBinding="Value" CategoryBinding="Counter" /><chartView:LineSeries x:Name="Item2" ItemsSource="{Binding Item[1]}" ValueBinding="Value" CategoryBinding="Counter" /><chartView:LineSeries x:Name="Item3" ItemsSource="{Binding Item[2]}" ValueBinding="Value" CategoryBinding="Counter" /><chartView:LineSeries x:Name="Item4" ItemsSource="{Binding Item[3]}" ValueBinding="Value" CategoryBinding="Counter" /><chartView:LineSeries x:Name="Item5" ItemsSource="{Binding Item[4]}" ValueBinding="Value" CategoryBinding="Counter" />public ObservableCollection<IEnumerable<GraphPlot>> Item{ get { return m_item; } set { m_item = value; OnPropertyChanged("Item"); }}<Rectangle Stroke="Black" StrokeThickness="1" Fill="#DADADA" Height="8" Width="8"> <Rectangle.Triggers> <EventTrigger RoutedEvent="MouseLeftButtonDown"> <BeginStoryboard> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen" Storyboard.Target="{x:Reference ContextMenu}"> <DiscreteObjectKeyFrame> <DiscreteObjectKeyFrame.Value> <sys:Boolean>True</sys:Boolean> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> <telerik:RadContextMenu.ContextMenu> <telerik:RadContextMenu x:Name="ContextMenu" ShowDelay="0"> <telerik:RadMenuItem Header="Reset value" /> <telerik:RadMenuItem Header="Set binding" /> </telerik:RadContextMenu> </telerik:RadContextMenu.ContextMenu> </Rectangle><telerik:RadToggleButton x:Name="ShowLogButton" Grid.Column="1" Grid.Row="1" Content="..."></telerik:RadToggleButton><telerik:RadListBox ItemsSource="{Binding Path=Log}" DisplayMemberPath="Description" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="70" Visibility="{Binding ElementName=ShowLogButton, Path=IsChecked, Converter={StaticResource ControlVisibilityConverter}}"></telerik:RadListBox>
<telerik:RadToggleButton x:Name="ShowLogButton" Grid.Column="1" Grid.Row="1" Content="..."></telerik:RadToggleButton>
<telerik:RadListBox ItemsSource="{Binding Path=Log}" DisplayMemberPath="Description" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="70" Visibility="{Binding ElementName=ShowLogButton, Path=IsChecked, Converter={StaticResource ControlVisibilityConverter}}">
<telerik:PersistenceManager.SerializationOptions>
<telerik:SerializationMetadataCollection>
<telerik:PropertyNameMetadata Condition="Except" Expression="Visibility" SearchType="PropertyName" />
</telerik:SerializationMetadataCollection>
</telerik:PersistenceManager.SerializationOptions>
</telerik:RadListBox>
