|
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using HappyNomad.Examples.PresentationModel.GUI.Model;
using System.Collections.Specialized;
namespace HappyNomad.Examples.PresentationModel.GUI {
/// <summary>
/// Interaction logic for Demo1.xaml
/// </summary>
public partial class Demo1 : System.Windows.Controls.UserControl {
private IList<Demo1ItemView> displayedItems = new ObservableCollection<Demo1ItemView>();
public Demo1() {
InitializeComponent();
ObservableCollection<SampleItem> domainList = App.SampleListContainer.SampleList;
foreach ( SampleItem item in domainList ) //build sample presentation-model objects:
displayedItems.Add( new Demo1ItemView(item) );
domainList.CollectionChanged += domainList_CollectionChanged; //listen for future changes
sampleListBox.ItemsSource = displayedItems; //bind presentation-model to UI
}
private void editableContentControl_ButtonClick( object sender, RoutedEventArgs args ) {
Button clickedButton = (Button)args.OriginalSource;
ContentControl targetContentCtrl = (ContentControl)sender;
Demo1ItemView targetItem = (Demo1ItemView)targetContentCtrl.DataContext;
string changeTemplateTo = "defaultTemplate";
if ( "editButton".Equals( clickedButton.Name ) )
changeTemplateTo = "editTextTemplate";
else if ( "saveButton".Equals( clickedButton.Name ) ) {
targetItem.DomainItem.Name = targetItem.UnsavedName;
//this is where you'd persist changes to the database
} else if ( "cancelButton".Equals( clickedButton.Name ) )
targetItem.UnsavedName = targetItem.DomainItem.Name;
targetContentCtrl.ContentTemplate =
(DataTemplate)targetContentCtrl.Style.Resources[changeTemplateTo];
targetItem.IsSelected = true;
targetContentCtrl.Focus();
}
private void domainList_CollectionChanged( object sender, NotifyCollectionChangedEventArgs args ) {
if ( args.Action == NotifyCollectionChangedAction.Add )
foreach ( SampleItem addingToCollection in args.NewItems )
displayedItems.Add( new Demo1ItemView( addingToCollection ) );
else if ( args.Action == NotifyCollectionChangedAction.Remove )
foreach ( SampleItem removingFromCollection in args.OldItems )
foreach ( Demo1ItemView v in displayedItems )
if ( v.DomainItem == removingFromCollection )
{ displayedItems.Remove( v ); return; }
}
}
}
|
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.
Adrian loves facilitating suave user experiences via the latest and greatest GUI technologies such as Windows 8 Metro-style apps as well as WPF. More generally, he finds joy in architecting software that is easy to comprehend and maintain. He does so by applying design patterns at the top-level, and by incessantly refactoring code at lower levels. He's always interested in hearing about opportunities for full or part-time development work. He resides in Pennsylvania but can potentially travel anywhere in the country. (Writing about himself in the third-person is Adrian's new hobby.)