Useful WPF Data Converters

May 31st, 2012 No comments

Just sharing the most common WPF data binding converters that I encounter on day to day basis. This should be beneficial for every WPF developer.

Usage

Usage in XAML should be as follows:

  1. Define the XAML namespace to point to the common namespace where you would store your common converters. For example:
  2. <window ...
           xmlns:converters="clr-namespace:MyCompany.MyProject.MyConverters" >
  3. Use converter like this:
  4. <button Content="Push Me" Click="ButtonConvertToBool_Click"
           Visibility="{Binding Path=Something, Converter={x:Static converters:BoolToVisibleConverter.Instance}}"
           IsEnabled="{Binding Path=SomeOtherThing, Converter={x:Static converters:IsNotNullConverter.Instance}}"
           />

Common Converters

IsNullConverter

Gets an object as an input and returns true if the object is not null; otherwise returns false.

public class IsNullConverter : IValueConverter
{
    private static readonly IsNullConverter _instance = new IsNullConverter();

    public static IsNullConverter Instance
    {
        get { return IsNullConverter._instance; }
    }

    private IsNullConverter()
    {
    }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        try
        {
            return (value == null);
        }
        catch
        {
            return null;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

Read more…

Some Useful Code Snippets for C#/WPF

September 14th, 2010 No comments

Attached are some code snippets that I use during code development.

  • newClass – code Snippet for creating a class
  • newClassNotify – code Snippet for creating a class which implements INotifyPropertyChanged interface
  • dprop – code snippet for a property using DependencyProperty
  • dpropu – code snippet for a property using DependencyProperty with ChangeCallback notifier
  • dpropObCollection – code snippet for a property using DependencyProperty to an ObservableCollection
  • conv – code Snippet for creating a IValueConverter
  • multiconv – code Snippet for creating a IMultiValueConverter
  • propNotify – code Snippet for creating a property with get/set accessors and property value change notification trigger

Several Facts about C# Events and Delegates

September 10th, 2010 No comments

Here I put some facts about events and delegates.

Event vs. Delegate

  • “event” in delegate definition is just a limitation of delegate invocation. If you use “event” you can invoke the delegate from the scope of the class ONLY. Usually you would not like a client of your class to directly trigger an event. Use “event” to encapsulate your delegates.
  • Interfaces define public methods and properties of the class. Interface does not define member variables. In order to specify a delegate in an interface an “event” modifier should be used.
  • “event” also provides an ability to perform some actions when something is subscribed or unsubscribed from the delegate. For that purpose “add” and “remove” accessors should be used inside the definition of an event (just like get/set accessors in a regular property).

Duplicate Subscription

  • Duplicate subscription to events results in duplicate invocation of subscribed method.

“MyEvent += Function” vs. “MyEvent += new Handler(Function)”

  • This syntax produces the same result. In both cases a “Function” is subscribed to “MyEvent”.

“MyEvent -= Function” vs. “MyEvent -= new Handler(Function)”

  • This syntax produces the same result. In both cases a “Function” is unsubscribed from “MyEvent”.


Installing Team Foundation Server (TFS) 2010

August 1st, 2010 2 comments

Steps to install TFS 2010.

  1. Install Windows Server 2003 SP2.
  2. Install SQL Server 2008 R2. Do not configure Reporting Services at this step!
  3. Install WSS 3.0 SP2. See details
  4. Configure Reporting Services.
    • Choose native mode if you do not require to use Microsoft Sharepoint Portal
    • Choose Sharepoint integrated mode only if really required
  5. Install TFS 2010.
  6. Do not forget to install Team Foundation Extension for Sharepoint Services even if you are setting up a a singe server configuration.
  7. Configure TFS 2010 using the wizard in TFS Administration Console.
  8. Replace local server name with FQDN to expose public access to the server. Follow this post to rename URLs. After that go to Sharepoint Extension configuration in TFS Administration Console and replace URL with FQDN.

Some problems you might encounter during/after installation of TFS 2010

  • Problem:When running TFS 2010 upgrade wizard and reaching Readiness Checks you might get an on ‘Configuration Database’ step. The message can say: “TF255440: The following account has a SQL Server login, but the login was denied access: DOMAIN\User. The server selected to host the databases for Team Foundation Server is: MYSERVER. The SQL Server login associated with the user account must be granted access to the SQL Server instance on that server.”

    Solution:

    Delete that DOMAIN\User account from SQL Logins. You should not get that message again.

  • Problem:When connecting SharePoint to TFS in Team Foundation Administration Console you most probably will get “TF255329: The following site could not be accessed … ” error when clicking “Validate Path” button.Solution:

    Even though you have a single server setup you need to install TFS Extension for SharePoint. Once installed you will able to easily connect Sharepoint to TFS.

Useful links related to TFS 2010 Installation

Cool Stuff in WPF

July 27th, 2010 No comments

Compromise in code

July 27th, 2010 No comments

Today I encountered another wild animal while surfing in the jungle. Pretty much nothing to comment :)

if (visiblePath == null)
{
     visiblePath = new DispatcherTimer();
     visiblePath.Tick -= new EventHandler(visiblePath_Tick);
     visiblePath.Tick += new EventHandler(visiblePath_Tick);
     visiblePath.Interval = TimeSpan.FromSeconds(500);
}
else
{
     visiblePath.Tick -= new EventHandler(visiblePath_Tick);
     visiblePath.Tick += new EventHandler(visiblePath_Tick);
}
visiblePath.Stop();
visiblePath.Start();

Model-View-ViewModel (MVVM)

July 26th, 2010 No comments

This is another post where I will gather useful documentation about so called Model-View-ViewModel pattern used for GUI development in WPF environment.

Identifying and Eliminating C#/WPF Memory Leaks

June 30th, 2010 No comments

PhotoSuck Beta is now released!

October 21st, 2009 2 comments

Hi everybody. At last long-awaited “PhotoSuck Beta” is on air. Its still in testing stage and You’re welcome to be one of its first users. For those guys who are new to “PhotoSuck” – its a windows based application which downloads Your desired photos from Flickr and Picasa. Your desires are defined by sets of criterias. Criterias include social relevance(specific users’ photos, Your friends’ photos, …); tag relevance; picture quality (portrait, landscape, HD, SD, …); upload date; and more. All this is achieved using cute WPF application, which looks like this:

PhotoSuck Beta Main Screen

Read more…

Code Duplication

September 24th, 2009 No comments

Today at the office I encountered another nightmare. It seems like the author of the code above was doing the development late at night, he sleep in the middle and unintentionally pushed Ctrl-V button.

DuplicationHell
Read more…