A: 

I'm not sure if this is the best way to do this, but it works. The problem with my initial code was that I needed both a static and a instance constructor for the class. The timer is created in the static constructor (which is only run once) while there needs to be one event handler per binding so this is handled in the instance constructor.

Here is the code that works:

using System;
using System.ComponentModel;
using System.Windows.Threading;

namespace TestMultiBind
{
    class DataSource : INotifyPropertyChanged
    {
        static int _DataValue;
        static DispatcherTimer tmr = new DispatcherTimer();

        #region InotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

        public int DataValue
        {
            get { return _DataValue; }
        }

        static DataSource()
        {
            if (!DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject()))
            {
                tmr.Interval = TimeSpan.FromMilliseconds(10);
                tmr.Start();
            }
        }
        public DataSource()
        {
            if (!DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject()))
            {
                tmr.Tick += new EventHandler(tmr_Tick);
            }
        }
        void tmr_Tick(object sender, EventArgs e)
        {
            _DataValue = DateTime.Now.Second;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("DataValue"));
            }
        }
    }
}
JonnyBoats