Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version
Go to top

Building an Extensible Application with MEF, WPF, and MVVM

, 15 Nov 2009
An article for anyone interested in how to build an extensible application using WPF and the Model-View-ViewModel pattern.
SoapBox.Demo.Setup.zip
SoapBox.Demo.Setup
setup.exe
SoapBox.Demo.Setup.msi
SoapBoxCoreWithDemo.zip
SoapBoxCoreWithDemo
AvalonDock
AvalonDock
AvalonDock.snk
doc
AvalonDock.shfb
Help
LastBuild.log
DrWPF
GreyableImage
Properties
Settings.settings
Resources
DocumentHS.png
images
Aero
AeroDockBottom.png
AeroDockBottomHover.png
AeroDockLeft.png
AeroDockLeftHover.png
AeroDockPane.png
AeroDockPaneBottom.png
AeroDockPaneInto.png
AeroDockPaneLeft.png
AeroDockPaneRight.png
AeroDockPaneTop.png
AeroDockRight.png
AeroDockRightHover.png
AeroDockTop.png
AeroDockTopHover.png
Classic
PinAutoHide.png
PinAutoHideSelected.png
PinClose.png
PinCloseSelected.png
PinMenu.png
PinMenuSelected.png
DockBottom.PNG
DockLeft.PNG
DockPane.PNG
DockRight.PNG
DockTop.PNG
HTabGroup.png
Locked.png
PinAutoHide.png
PinClose.png
PinDocMenu.png
PinMenu.png
Thumbs.db
VTabGroup.png
themes
bin
NLog
src
NLog.snk
NLog
Conditions
Config
DotNet
Filters
Internal
FileAppenders
NetworkSenders
Win32
LayoutRenderers
Layouts
Mono
NLog.vs2003.csdproj
Targets
Compound
Wrappers
Unix
Web
Win32
LayoutRenderers
Targets
Physics2D
AdvanceMath
Design
Geometry2D
IO
Properties
Physics2DDotNet
Collections
DataTypes
Detectors
Ignorers
Joints
Physics2DDotNet.csproj.user
PhysicsLogics
Properties
Shapes
Solvers
References
System.ComponentModel.Composition.dll
Release
SoapBox
CodeSnippets
PropArgs.snippet
PropName.snippet
SoapBox.Core
SoapBox.Core.Arena
Arena
ArenaBodies
Physics
Utility
Properties
SoapBox.Core.Arena.csproj.user
SoapBox.Core.Contracts
App
Startup
Conditions
Gui
Controls
Layout
MenuItem
Options
StatusBar
StatusBarButton
StatusBarLabel
StatusBarRadioButton
StatusBarSeparator
StatusBarToggleButton
ToolBar
ToolBarItem
ToolBarButton
ToolBarLabel
ToolBarRadioButton
ToolBarSeparator
ToolBarToggleButton
ViewModel
Properties
Services
ExtensionService
LoggingService
Utilities
SoapBox.Core.Host
Properties
app.manifest
Settings.settings
SoapBox.Core.Layout
Layout
Properties
SoapBox.Core.Logging
Properties
Services
LoggingService
SoapBox.Core.Options
Options
Properties
Resources
cog.png
Workbench
MainMenu
SoapBox.Core.Workbench
Properties
Settings.settings
Resources
SoapBox.Core.Workbench.csproj.user
Workbench
MainMenu
SoapBox.Demo
SoapBox.Demo.HighScores
Layout
Pads
PinBall
Properties
Settings.settings
Resources
Workbench
MainMenu
SoapBox.Demo.PinBall
App
StartupCommands
star.png
Arena
ArenaBodies
Pin
PinBall
PinBallBonus
PinBallBottomBumper
PinBallBottomRamp
PinBallFlipper
PinBallFlipperMount
PinBallKicker
PinBallLauncher
PinBallLevel
PinBallPartition
PinBallReturnRamp
PinBallRoundedTop
PinBallSensor
PinBallStop
PinBallTableEdge
PinBallTarget
Options
Pads
Properties
Settings.settings
Resources
Sounds
beat1.wav
beat2.wav
bonus_fast.wav
brooomm.wav
doodoodoodoo.wav
driiinng2.wav
flip.wav
rattata_single.wav
tack.wav
tick.wav
time.wav
SoapBox.Demo.PinBall.csproj.user
Sound
Workbench
MainMenu
StatusBar
SoapBox.Demo.Setup
Debug
SoapBox.Demo.Setup.vdproj
// 
// Copyright (c) 2004-2006 Jaroslaw Kowalski <jaak@jkowalski.net>
// 
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without 
// modification, are permitted provided that the following conditions 
// are met:
// 
// * Redistributions of source code must retain the above copyright notice, 
//   this list of conditions and the following disclaimer. 
// 
// * Redistributions in binary form must reproduce the above copyright notice,
//   this list of conditions and the following disclaimer in the documentation
//   and/or other materials provided with the distribution. 
// 
// * Neither the name of Jaroslaw Kowalski nor the names of its 
//   contributors may be used to endorse or promote products derived from this
//   software without specific prior written permission. 
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
// THE POSSIBILITY OF SUCH DAMAGE.
// 

#if !NETCF

using System;
using System.Reflection;
using System.Globalization;
using NLog.Internal;
using System.IO;
using System.Runtime.InteropServices;

namespace NLog.Internal.Win32
{
    /// <summary>
    /// Win32 file attributes
    /// </summary>
    /// <remarks>
    /// For more information see <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp</a>.
    /// </remarks>
    [Flags]
    public enum Win32FileAttributes : int
    {
        /// <summary>
        /// Read-only
        /// </summary>
        Readonly = 0x00000001,

        /// <summary>
        /// Hidden
        /// </summary>
        Hidden = 0x00000002,

        /// <summary>
        /// System
        /// </summary>
        System = 0x00000004,

        /// <summary>
        /// File should be archived.
        /// </summary>
        Archive = 0x00000020,

        /// <summary>
        /// Device
        /// </summary>
        Device = 0x00000040,

        /// <summary>
        /// Normal
        /// </summary>
        Normal = 0x00000080,

        /// <summary>
        /// File is temporary (should be kept in cache and not 
        /// written to disk if possible)
        /// </summary>
        Temporary = 0x00000100,

        /// <summary>
        /// Sparse file.
        /// </summary>
        SparseFile = 0x00000200,

        /// <summary>
        /// Reparse point.
        /// </summary>
        ReparsePoint = 0x00000400,

        /// <summary>
        /// Compress file contents.
        /// </summary>
        Compressed = 0x00000800,

        /// <summary>
        /// File should not be indexed by the content indexing service. 
        /// </summary>
        NotContentIndexed = 0x00002000,

        /// <summary>
        /// Encrypt file.
        /// </summary>
        Encrypted = 0x00004000,

        /// <summary>
        /// The system writes through any intermediate cache and goes directly to disk. 
        /// </summary>
        WriteThrough = unchecked((int)0x80000000),

        /// <summary>
        /// The system opens a file with no system caching
        /// </summary>
        NoBuffering = 0x20000000,

        /// <summary>
        /// Delete file after it is closed.
        /// </summary>
        DeleteOnClose = 0x04000000,

        /// <summary>
        /// A file is accessed according to POSIX rules.
        /// </summary>
        PosixSemantics = 0x01000000,
    };
}

#endif

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 GNU Lesser General Public License (LGPLv3)

Share

About the Author

Scott Whitlock
Engineer
Canada Canada
By day I'm a Professional Engineer, doing .NET, VB6, SQL Server, and Automation (Ladder Logic, etc.) programming.
 
On weekends I write and maintain an open source extensible application framework called SoapBox Core.
 
In the evenings I provide front line technical support for moms4mom.com and I help out with administrative tasks (like formatting stuff). I also pitch in as a moderator from time to time.
 
You can follow me on twitter.

You may also be interested in...

| Advertise | Privacy | Mobile
Web01 | 2.8.140916.1 | Last Updated 15 Nov 2009
Article Copyright 2009 by Scott Whitlock
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid