Click here to Skip to main content
15,891,253 members
Articles / Desktop Programming / WPF

EXIF Compare Utility using WPF

Rate me:
Please Sign up or sign in to vote.
5.00/5 (15 votes)
12 Apr 2010CPOL8 min read 68.8K   1.1K   41  
The Exif Compare Utility is a WinDiff equivalent for image files that compares the Exif meta-data and displays the differences and similarities. The application is written using WPF and MVVM.
// <copyright file="ExifPropertyPropertyDescriptor.cs" company="Nish Sivakumar">
// Copyright (c) Nish Sivakumar. All rights reserved.
// </copyright>

namespace ExifReader
{
    using System;
    using System.ComponentModel;

    /// <summary>
    /// Implements a PropertyDescriptor for ExifProperty that returns the descriptive
    /// string representation of the property's current value.
    /// </summary>
    internal class ExifPropertyPropertyDescriptor : PropertyDescriptor
    {
        /// <summary>
        /// Initializes a new instance of the ExifPropertyPropertyDescriptor class.
        /// </summary>
        /// <param name="exifProperty">The ExifProperty to use with this instance</param>
         public ExifPropertyPropertyDescriptor(ExifProperty exifProperty)
            : base(exifProperty.ExifPropertyName, new Attribute[1] { new CategoryAttribute(exifProperty.ExifPropertyCategory) })
        {
            this.ExifProperty = exifProperty;
        }       
        
        /// <summary>
        /// Gets the ExifProperty associated with this instance
        /// </summary>
        public ExifProperty ExifProperty { get; private set; }

        /// <summary>
        /// Gets the type of the component this property is bound to
        /// </summary>
        public override Type ComponentType
        {
            get { return typeof(ExifReader); }
        }

        /// <summary>
        /// Gets a value indicating whether this property is read-only
        /// </summary>
        public override bool IsReadOnly
        {
            get { return true; }
        }

        /// <summary>
        /// Gets the type of the property.
        /// </summary>
        public override Type PropertyType
        {
            get { return typeof(string); }
        }

        /// <summary>
        /// Indicates if the component can be reset
        /// </summary>
        /// <param name="component">The component to test</param>
        /// <returns>A value indicating whether this component can be reset</returns>
        public override bool CanResetValue(object component)
        {
            return false;
        }

        /// <summary>
        /// Gets the current value of the property
        /// </summary>
        /// <param name="component">The associated component</param>
        /// <returns>The property value</returns>
        public override object GetValue(object component)
        {
            return this.ExifProperty.ToString();
        }

        /// <summary>
        /// Resets the value of this property
        /// </summary>
        /// <param name="component">The associated component</param>
        public override void ResetValue(object component)
        {
            // We don't need to support this
        }

        /// <summary>
        /// Sets the value of the property
        /// </summary>
        /// <param name="component">The associated component</param>
        /// <param name="value">The new value to set</param>
        public override void SetValue(object component, object value)
        {
            // We don't need to support this
        }

        /// <summary>
        /// Gets a value indicating whether to serialize this property
        /// </summary>
        /// <param name="component">The associated component</param>
        /// <returns>A bool indicating whether to serialize this property or not</returns>
        public override bool ShouldSerializeValue(object component)
        {
            return false;
        }
    }
}

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
United States United States
Nish Nishant is a technology enthusiast from Columbus, Ohio. He has over 20 years of software industry experience in various roles including Chief Technology Officer, Senior Solution Architect, Lead Software Architect, Principal Software Engineer, and Engineering/Architecture Team Leader. Nish is a 14-time recipient of the Microsoft Visual C++ MVP Award.

Nish authored C++/CLI in Action for Manning Publications in 2005, and co-authored Extending MFC Applications with the .NET Framework for Addison Wesley in 2003. In addition, he has over 140 published technology articles on CodeProject.com and another 250+ blog articles on his WordPress blog. Nish is experienced in technology leadership, solution architecture, software architecture, cloud development (AWS and Azure), REST services, software engineering best practices, CI/CD, mentoring, and directing all stages of software development.

Nish's Technology Blog : voidnish.wordpress.com

Comments and Discussions