- goalbook.zip
- GoalBook
- Dependencies
- CAG WPF 2
- Microsoft.Practices.Composite.dll
- Microsoft.Practices.Composite.Presentation.dll
- Microsoft.Practices.Composite.UnityExtensions.dll
- Microsoft.Practices.ObjectBuilder2.dll
- Microsoft.Practices.ServiceLocation.dll
- Microsoft.Practices.Unity.dll
- vssver2.scc
- CSLA
- Csla.dll
- Csla.XmlSerializers.dll
- vssver2.scc
- Infragistics
- Infragistics3.Wpf.DataPresenter.v9.1.Express.dll
- Infragistics3.Wpf.Editors.v9.1.Express.dll
- Infragistics3.Wpf.v9.1.Express.dll
- vssver2.scc
- WPFToolkit
- vssver2.scc
- WPFToolkit.dll
- GoalBook.Controls
- GoalBook.Goals
- GoalBook.Infrastructure
- GoalBook.Notes
- GoalBook.Public
- GoalBook.Shell
- App.ico
- App.xaml
- App.xaml.cs
- Bootstrapper.cs
- Commands
- GoalBook.Shell.csproj
- GoalBook.Shell.csproj.user
- Journal.ico
- Journal48.ico
- Misc
- Modules
- Properties
- Resources
- arrow_refresh.png
- arrow_undo.png
- checked.gif
- cross.png
- disk.png
- email.png
- erase.png
- error.png
- exclamation.png
- flag_red.png
- group.png
- help.png
- information.png
- magnifier.png
- page_red.png
- pencil.png
- printer.png
- user.png
- vssver2.scc
- Wave.jpg
- world.png
- world_link.png
- Services
- Splash.png
- Views
- vssver2.scc
- Windows
- GoalBook.sln
- GoalBook.snk
- GoalBook.Synchronisation
- GoalBook.Tasks
- License.txt
- ReadMe.txt
- SolutionInfo.cs
- vssver2.scc
|
// <copyright file="CheckedListControl.xaml.cs" company="GoalBook">
// Copyright © 2009 Mark Brownsword. All rights reserved.
// This source code and supporting files are licensed under The Code Project
// Open License (CPOL) as detailed at http://www.codeproject.com/info/cpol10.aspx.
// </copyright>
namespace GoalBook.Controls.CheckedList
{
#region Using Statements
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using GoalBook.Infrastructure;
#endregion
/// <summary>
/// Interaction logic for CheckedListControl.xaml
/// </summary>
public partial class CheckedListControl : UserControl
{
#region Constants and Enums
#endregion
#region Instance and Shared Fields
/// <summary>
/// Declaration for CheckedItemsChangedEvent.
/// </summary>
public static readonly RoutedEvent CheckedItemsChangedEvent = EventManager.RegisterRoutedEvent(
"CheckedItemsChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CheckedListControl));
/// <summary>
/// Declaration for StatusChangedEvent.
/// </summary>
public static readonly RoutedEvent StatusChangedEvent = EventManager.RegisterRoutedEvent(
"StatusChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CheckedListControl));
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the CheckedListControl class.
/// </summary>
public CheckedListControl()
{
InitializeComponent();
this.filterListBox.ItemContainerGenerator.StatusChanged += this.ItemContainerGenerator_StatusChanged;
this.CheckedItems = new KeyValueItemList();
this.RaiseCheckedItemsChangedEvent = false;
}
#endregion
#region Delegates and Events
/// <summary>
/// CheckedItemsChanged Event.
/// </summary>
public event RoutedEventHandler CheckedItemsChanged
{
add { AddHandler(CheckedItemsChangedEvent, value); }
remove { RemoveHandler(CheckedItemsChangedEvent, value); }
}
/// <summary>
/// CheckedItemsChanged Event.
/// </summary>
public event RoutedEventHandler StatusChanged
{
add { AddHandler(StatusChangedEvent, value); }
remove { RemoveHandler(StatusChangedEvent, value); }
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the CheckedItems.
/// </summary>
public KeyValueItemList CheckedItems { get; set; }
/// <summary>
/// Gets or sets a value indicating whether RaiseCheckedItemsChangedEvent.
/// </summary>
public bool RaiseCheckedItemsChangedEvent { get; set; }
#endregion
#region Public and internal Methods
#endregion
#region Base Class Overrides
#endregion
#region Private and Protected Methods
/// <summary>
/// Init CheckBoxList.
/// </summary>
private void InitCheckBoxList()
{
this.RaiseCheckedItemsChangedEvent = false;
if (this.CheckedItems.Count == 0)
{
this.filterListBox.UnselectAll();
this.RaiseCheckedItemsChangedEvent = true;
return;
}
ListBoxItem listBoxItem = null;
KeyValueItem content = null;
foreach (object item in this.filterListBox.Items)
{
// Get the listBoxItem belonging to the item.
listBoxItem = (ListBoxItem)this.filterListBox.ItemContainerGenerator.ContainerFromItem(item);
content = (KeyValueItem)listBoxItem.Content;
foreach (KeyValueItem keyValueItem in this.CheckedItems)
{
if (keyValueItem.Key == content.Key)
{
listBoxItem.IsSelected = true;
break;
}
}
}
this.RaiseCheckedItemsChangedEvent = true;
}
/// <summary>
/// On Checked Items Changed.
/// </summary>
private void OnCheckedItemsChanged()
{
RoutedEventArgs args = new RoutedEventArgs(CheckedItemsChangedEvent);
RaiseEvent(args);
}
/// <summary>
/// On Status Changed.
/// </summary>
private void OnStatusChanged()
{
RoutedEventArgs args = new RoutedEventArgs(StatusChangedEvent);
RaiseEvent(args);
}
/// <summary>
/// Set Checked Items.
/// </summary>
private void SetCheckedItems()
{
if (this.filterListBox.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
{
return;
}
this.CheckedItems.Clear();
ListBoxItem listBoxItem = null;
KeyValueItem content = null;
foreach (object item in filterListBox.SelectedItems)
{
// Get the listBoxItem and its content.
if ((listBoxItem = (ListBoxItem)this.filterListBox.ItemContainerGenerator.ContainerFromItem(item)) != null)
{
if ((content = (KeyValueItem)listBoxItem.Content) != null)
{
// Add to CheckedItems.
this.CheckedItems.Add(new KeyValueItem(content.Key, content.Value, content.Order));
}
}
}
}
#endregion
#region Event Handlers
/// <summary>
/// Handle Control_Loaded event.
/// </summary>
/// <param name="sender">sender parameter</param>
/// <param name="e">RoutedEventArgs parameter</param>
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(this))
{
return;
}
this.RaiseCheckedItemsChangedEvent = true;
}
/// <summary>
/// Handle FilterListBox_SelectionChanged event.
/// </summary>
/// <param name="sender">sender parameter</param>
/// <param name="e">SelectionChangedEventArgs parameter</param>
private void FilterListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (this.RaiseCheckedItemsChangedEvent)
{
this.SetCheckedItems();
this.OnCheckedItemsChanged();
}
}
/// <summary>
/// Handle ItemContainerGenerator_StatusChanged event.
/// </summary>
/// <param name="sender">sender parameter</param>
/// <param name="e">EventArgs parameter</param>
private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
// After modifying the bound list it is necessary to wait for ItemContainerGenerator status
// to change to 'ContainersGenerated' before attempting to locate any new items.
if (this.filterListBox.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
{
return;
}
this.OnStatusChanged();
this.InitCheckBoxList();
this.SetCheckedItems();
this.OnCheckedItemsChanged();
}
#endregion
}
}
|
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.
I've been working as a software developer since 2000 and hold a Bachelor of Business degree from The Open Polytechnic of New Zealand. Computers are for people and I aim to build applications for people that they would want to use.