Click here to Skip to main content
15,885,941 members
Articles / Desktop Programming / WPF

Fun With Physics

,
Rate me:
Please Sign up or sign in to vote.
4.94/5 (148 votes)
3 Apr 2008CPOL30 min read 504.4K   3.4K   371  
WPF: A Beginner's Guide series, end exemplar and fun with Physics.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.ComponentModel;

using PhysicsHost.DataAccess;
using PhysicsHost.ViewModel;

namespace PhysicsHost
{
    /// <summary>
    /// Explitly updates and validates the underlying bound
    /// Customer object.
    /// </summary>
    public partial class EditCustomerWindow : Window
    {
        #region Data
        CustomerViewModel customerViewModel = new CustomerViewModel();
        #endregion

        #region Ctor
        public EditCustomerWindow()
        {
            InitializeComponent();
        }
        #endregion

        #region Command Sinks
        /// <summary>
        /// Sumbit the bound data changes back into the underlying
        /// <see cref="Customer">Customer data object</see> and see
        /// if we are able to update the Database
        /// </summary>
        private void CustomerViewModelSubmitChangesCommand_Executed(
            object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                if (UpdateBindings())
                {
                    this.customerViewModel.SubmitChanges();
                    this.Close();
                    MessageBoxHelper.ShowMessageBox(
                        "Successfully updated Customer", "Customer updated");
                }
                else
                {
                    MessageBoxHelper.ShowErrorBox(
                        "Error updating Customer", "Customer error");
                }
            }
            catch (BindingException bex)
            {
                MessageBoxHelper.ShowErrorBox(
                    "Binding error occurred\r\n" + bex.Message,
                    "Binding error");
            }
            catch (Exception ex)
            {
                MessageBoxHelper.ShowErrorBox(
                    "An Error occurred trying to update the database\r\n" 
                    + ex.Message,"Database save error");
            }

        }
        #endregion

        #region Private Methods
        /// <summary>
        /// Cancel, so close window
        /// </summary>
        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        /// Update the changes back into the underlying
        /// <see cref="Customer">Customer data object</see>
        /// <returns>True if all binding values were valis. This
        /// is done by using Paul Stovells <see cref="ErrorProvider">
        /// ErrorProvider</see> class</returns>
        private bool UpdateBindings()
        {
            try
            {
                UpdateSingleBinding(txtContactName, TextBox.TextProperty);
                UpdateSingleBinding(txtContactTitle, TextBox.TextProperty);
                UpdateSingleBinding(txtAddress, TextBox.TextProperty);
                UpdateSingleBinding(txtCity, TextBox.TextProperty);
                UpdateSingleBinding(txtRegion, TextBox.TextProperty);
                UpdateSingleBinding(txtPostalCode, TextBox.TextProperty);
                UpdateSingleBinding(txtCountry, TextBox.TextProperty);
                UpdateSingleBinding(txtPhone, TextBox.TextProperty);
                UpdateSingleBinding(txtFax, TextBox.TextProperty);

                //now validate the binding values
                return errorProvider.Validate();
            }
            catch
            {
                throw new BindingException(string.Format(
                    "There was a problem updating the Bindings for Customer {0}",
                    (this.DataContext as Customer).CustomerID));
            }
        }

        /// <summary>
        /// Updates a single TextBox binding
        /// </summary>
        private void UpdateSingleBinding(DependencyObject target, DependencyProperty dp)
        {
            BindingExpression bindingExpression =
                BindingOperations.GetBindingExpression(
                target, dp);
            bindingExpression.UpdateSource();
        }

        #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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United Kingdom United Kingdom
I currently hold the following qualifications (amongst others, I also studied Music Technology and Electronics, for my sins)

- MSc (Passed with distinctions), in Information Technology for E-Commerce
- BSc Hons (1st class) in Computer Science & Artificial Intelligence

Both of these at Sussex University UK.

Award(s)

I am lucky enough to have won a few awards for Zany Crazy code articles over the years

  • Microsoft C# MVP 2016
  • Codeproject MVP 2016
  • Microsoft C# MVP 2015
  • Codeproject MVP 2015
  • Microsoft C# MVP 2014
  • Codeproject MVP 2014
  • Microsoft C# MVP 2013
  • Codeproject MVP 2013
  • Microsoft C# MVP 2012
  • Codeproject MVP 2012
  • Microsoft C# MVP 2011
  • Codeproject MVP 2011
  • Microsoft C# MVP 2010
  • Codeproject MVP 2010
  • Microsoft C# MVP 2009
  • Codeproject MVP 2009
  • Microsoft C# MVP 2008
  • Codeproject MVP 2008
  • And numerous codeproject awards which you can see over at my blog

Written By
Software Developer (Senior)
Sweden Sweden
Article videos
Oakmead Apps Android Games

21 Feb 2014: Best VB.NET Article of January 2014 - Second Prize
18 Oct 2013: Best VB.NET article of September 2013
23 Jun 2012: Best C++ article of May 2012
20 Apr 2012: Best VB.NET article of March 2012
22 Feb 2010: Best overall article of January 2010
22 Feb 2010: Best C# article of January 2010

Comments and Discussions