Click here to Skip to main content
15,881,281 members
Articles / Desktop Programming / WPF

A nice approach for a LOB WPF application

Rate me:
Please Sign up or sign in to vote.
4.89/5 (39 votes)
22 Feb 2009CPOL13 min read 117.2K   2.1K   93  
An implementation of the MVVM Patterns + CommandModel within a WPF LOB application.
using System.Windows;
using System.Windows.Input;

namespace Mainardi.ViewModels.CommandBase
{
    public static class CreateCommandBinding
    {
        public static readonly DependencyProperty CommandProperty =
            DependencyProperty.RegisterAttached("Command",
                typeof(CommandModel),
                typeof(CreateCommandBinding),
                new PropertyMetadata(
                    new PropertyChangedCallback(OnCommandInvalidated)));

        public static CommandModel GetCommand(DependencyObject sender)
        {
            return (CommandModel)sender.GetValue(CommandProperty);
        }

        public static void SetCommand(DependencyObject sender, CommandModel command)
        {
            sender.SetValue(CommandProperty, command);
        }

        private static void OnCommandInvalidated(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            UIElement element = (UIElement)dependencyObject;
            element.CommandBindings.Clear();

            CommandModel commandModel = e.NewValue as CommandModel;
            if (commandModel != null)
            {
                element.CommandBindings.Add(
                    new CommandBinding(commandModel.Command,
                        commandModel.Executed,
                        commandModel.CanExecute));
            }

            CommandManager.InvalidateRequerySuggested();
        }
    }
}

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
Architect
Brazil Brazil
Senior Software Architect from Brazil.

Comments and Discussions