- XamlPatterns_v1.1.0.0.zip
- Controls
- Core
- docu
- Program
- Pub
- Desktop.Debug
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- Desktop.Release
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- Silverlight.Debug
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- Silverlight.Release
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- WindowsPhone.Debug
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- WindowsPhone.Release
- Itenso.Community.XamlPatterns.Controls.dll
- Itenso.Community.XamlPatterns.dll
- XamlPatterns.Desktop.sln
- XamlPatterns.Desktop.suo
- XamlPatterns.Silverlight.sln
- XamlPatterns.Silverlight.suo
- XamlPatterns.WindowsPhone.sln
- XamlPatterns.WindowsPhone.suo
|
// -- FILE ------------------------------------------------------------------
// name : ItemCollectionSelection.cs
// project : Swisscom SCS
// created : Jani Giannoudis - 2012.05.05
// language : c#
// environment: .NET 4.0
// copyright : (c) 2004-2012 by Itenso GmbH, Switzerland
// --------------------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using Itenso.Community.XamlPatterns.Actions.Data;
namespace Itenso.Community.XamlPatterns.Collection
{
// ------------------------------------------------------------------------
public class ItemCollectionSelection<TItemCollection,TItem> : IItemCollectionSelection<TItemCollection, TItem>
where TItemCollection : class, INotifyCollectionChanged, ICollection<TItem>, new()
{
// ----------------------------------------------------------------------
public event PropertyChangedEventHandler PropertyChanged;
// ----------------------------------------------------------------------
public event SelectionChangedEventHandler SelectionChanged;
// ----------------------------------------------------------------------
event NotifyCollectionChangedEventHandler INotifyCollectionChanged.CollectionChanged
{
add { selectedItems.CollectionChanged += value; }
remove { selectedItems.CollectionChanged += value; }
} // INotifyCollectionChanged.CollectionChanged
// ----------------------------------------------------------------------
public TItemCollection SelectedItems
{
get { return selectedItems; }
} // SelectedItems
// ----------------------------------------------------------------------
IEnumerable ISelectable.SelectedItems
{
get { return selectedItems; }
} // ISelectable.SelectedItems
// ----------------------------------------------------------------------
public int Count
{
get { return selectedItems.Count; }
} // SelectedItems
// ----------------------------------------------------------------------
public void UpdateSelection( IEnumerable removedItems, IEnumerable addedItems )
{
int count = selectedItems.Count;
IUpdateable updateable = selectedItems as IUpdateable;
if ( updateable != null )
{
updateable.BeginUpdate();
}
if ( removedItems != null )
{
// ReSharper disable PossibleMultipleEnumeration
foreach ( object removedItem in removedItems )
// ReSharper restore PossibleMultipleEnumeration
{
TItem item = (TItem)removedItem;
if ( !Equals( item, default( TItem ) ) && selectedItems.Contains( item ) )
{
selectedItems.Remove( item );
}
}
}
if ( addedItems != null )
{
// ReSharper disable PossibleMultipleEnumeration
foreach ( object addedItem in addedItems )
// ReSharper restore PossibleMultipleEnumeration
{
TItem item = (TItem)addedItem;
if ( !Equals( item, default( TItem ) ) && !selectedItems.Contains( item ) )
{
selectedItems.Add( item );
}
}
}
if ( updateable != null )
{
updateable.EndUpdate();
}
// ReSharper disable PossibleMultipleEnumeration
OnSelectionChanged( removedItems, addedItems );
// ReSharper restore PossibleMultipleEnumeration
if ( selectedItems.Count != count )
{
NotifyPropertyChanged( "Count" );
}
} // UpdateSelection
// ----------------------------------------------------------------------
public IEnumerator<TItem> GetEnumerator()
{
return selectedItems.GetEnumerator();
} // GetEnumerator
// ----------------------------------------------------------------------
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
} // IEnumerable.GetEnumerator
// ----------------------------------------------------------------------
protected void NotifyPropertyChanged( string propertyName )
{
PropertyTool.RaisePropertyChanged( this, propertyName, PropertyChanged );
} // NotifyPropertyChanged
// ----------------------------------------------------------------------
protected virtual void OnSelectionChanged( IEnumerable removedItems, IEnumerable addedItems )
{
SelectionChangedEventHandler selectionChanged = SelectionChanged;
if ( selectionChanged != null )
{
selectionChanged( this, new SelectionChangedEventArgs( removedItems, addedItems ) );
}
} // OnSelectionChanged
// ----------------------------------------------------------------------
// members
private readonly TItemCollection selectedItems = new TItemCollection();
} // class ItemCollectionSelection
} // namespace Itenso.Community.XamlPatterns.Collection
// -- EOF -------------------------------------------------------------------
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
👨 Senior .NET Software Engineer
🚀 My Open Source Projects
-
Time Period Library 👉
GitHub
-
Payroll Engine 👉
GitHub
Feedback and contributions are welcome.