private void CheckParameters()
        {
            string newPropertyName = m_Template.TemplateDataSet.GetTemplateDataSetItemAsText(PropertyKeyNameKey);

            if (!string.IsNullOrEmpty(newPropertyName))
            {
                if (m_Property1 == null || !newPropertyName.Equals(m_Property1.Key, StringComparison.OrdinalIgnoreCase))
                {
                    m_Template.Debug(API.DebugLevel.Low, API.DebugCategory.Information, "Property key changed to " + newPropertyName);

                    if (m_Property1 != null)
                    {
                        m_Property1.TemplatePropertyChanged -= new API.TemplatePropertyEventHandler(Property1_TemplatePropertyChanged);
                    }

                    m_Property1 = m_Template.GetTemplateProperty(newPropertyName);
                    m_Property1.TemplatePropertyChanged += new API.TemplatePropertyEventHandler(Property1_TemplatePropertyChanged);
                }

                string newPropertySharedName = m_Template.TemplateDataSet.GetTemplateDataSetItemAsText(PropertySharedNameKey);
                m_Property1.SharedName = newPropertySharedName;
            }
            else
            {
                m_Template.Debug(API.DebugLevel.High, API.DebugCategory.Error, "Property key name was not set");
            }
        }
        private void UpdateGUI()
        {
            //Update the GUI

            //NOTE, in a real template a proper pattern should be used such as MVVM
            if (!string.IsNullOrEmpty(m_StatisticsKey1))
            {
                textBoxKey.Text   = m_StatisticsKey1;
                textBoxValue.Text = m_Template.GetTemplateProperty(m_StatisticsKey1).Value;
            }
            else
            {
                textBoxKey.Text   = "<key not set>";
                textBoxValue.Text = "<value not set>";
            }

            //Update
            m_Dispatcher.Invoke(DispatcherPriority.Render, (Action) delegate() { });
        }