4

私は WPF アプリケーションを構築していますが、WPF を使用することの喜びとフラストレーションのいくつかをゆっくりと明らかにしています。私の最新の質問には、UI を使用して更新することが含まれますINotifyPropertyChanged

私のアプリは UserControls を積み重ねており、それぞれUserControlに複数のコントロールが含まれているため、全体として、毎秒更新されてライブ データを提供する何百ものコントロールがあります。すべてのコントロールを更新するために、現在意図したとおりに機能する以下のようなものを使用しています。

namespace ProjectXAML
{
    public partial class ProjectX : UserControl, INotifyPropertyChanged
    {


#region Declare Getter/Setter with INotifyPropertyChanged groupx3

        private string m_group1Text1;
        public string group1Text1
        {
            get
            {
                return m_group1Text1;
            }
            set
            {
                m_group1Text1 = value;
                NotifyPropertyChanged("group1Text1");
            }
        }

        private string m_group1Text2;
        public string group1Text2
        {
            get
            {
                return m_group1Text2;
            }
            set
            {
                m_group1Text2 = value;
                NotifyPropertyChanged("group1Text2");
            }
        }

        private string m_group2Text1;
        public string group2Text1
        {
            get
            {
                return m_group2Text1;
            }
            set
            {
                m_group2Text1 = value;
                NotifyPropertyChanged("group2Text1");
            }
        }

        private string m_group2Text2;
        public string group2Text2
        {
            get
            {
                return m_group2Text2;
            }
            set
            {
                m_group2Text2 = value;
                NotifyPropertyChanged("group2Text2");
            }
        }

        private string m_group3Text1;
        public string group3Text1 
        { 
            get
            {
                return m_group3Text1;
            }
            set
            {
                m_group3Text1 = value;
                NotifyPropertyChanged("group3Text1");
            }
        }

        private string m_group3Text2;
        public string group3Text2
        {
            get
            {
                return m_group3Text2;
            }
            set
            {
                m_group3Text2 = value;
                NotifyPropertyChanged("group3Text2");
            }
        }

 #endregion

 #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        /// Notifies the property changed.
        private void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
 #endregion

}
}

私の質問は次のとおりです。

  1. PropertyChanged多くの get/set コードではなく、多くのコントロールのイベントを発生させるより洗練された方法はありますか?

  2. コントロールごとに個別のイベントを発生させるのではなく、複数のコントロールを含むPropertyChanged全体をカバーする1 つのイベントを発生させる方法はありますか? UserControl私が試みている方法よりも良い方法はありますか?

4

3 に答える 3

4

あなたの質問のこの部分を厳密に参照すると...「を含む UserControl 全体をカバーする 1 つの PropertyChanged イベントを発生させる方法はありますか?」

はい、オブジェクトのすべてのプロパティが更新されたことを示す PropertyChanged 通知を発生させることができます。

使用する:

NotifyPropertyChanged(null);

次に、オブジェクトのすべてのプロパティが変更されたことを INotifyPropertyChanged のリスナーに通知します。

これは通常は使用されません...そして悪用される可能性があります....そして、たとえば、いくつかのプロパティのみを変更してそれを使用した場合など、非効率的な更新を引き起こします。

ただし、オブジェクトに多くのプロパティがあり、とにかく同時に常に変更している場合は、それを使用するケースを主張できます...そして、多くの個々の通知を、変更後に発生した1つにまとめたいと考えましたすべてのプロパティ。

ユースケースの例 (つまり、何らかの方法ですべてのグループを更新していると仮定します):

void UpdateAllGroupTextProperties()
{
    group1Text1 = "groupA";
    group1Text2 = "groupA2";
    group2Text1 = "groupB";
    group2Text2 = "groupB2";
    group3Text1 = "groupC";
    group3Text2 = "groupC2";
    NotifyPropertyChanged(null);
}
于 2012-09-09T19:49:25.590 に答える
3

デザイン パターンモデル ビュー コントローラーを使用します。したがって、モデルはあなたのために変更を起こします。MVVMと共に、コントロールはその依存オブジェクトで変更を認識し、それらを自動的に表示します。

于 2012-09-09T18:23:05.590 に答える