2016-06-01 8 views
-3

私は理論を取得して独自に実装したいと思うので、質問を簡潔にしておきますが、必要に応じてより多くの情報/コードを提供できます。WPFの静的変数からシングルトンへの移行

私は単純な経費トラッカーを作成するためにWPFアプリケーションに取り組んでいます。今度は、EntriesDate、EntryCategory、EntryAmount、およびEntryCommentという4つの要素を持つExpenseEntryというオブジェクトのObservable Collectionを表示する1つのXAMLページがあります。 TempExpenseEntryとExpenseList(Observable Collection)は、private _variable、public変数(get; set)を使用して、ページのViewModel.csで開始されると宣言され、コードが動作します。エントリを整理します。 EntryTotalと呼ばれる浮動小数点もあり、新しいエントリが追加されるたびにEntryAmountをすべて集計します。

今、私は分析のために別のページを追加したいと思います。最終的には鐘や笛がたくさん出ますが、今はCategoryListと呼ばれる別のObservable Collectionを1ページ目で観察/購読し、新しいエントリが追加されたときに何らかのアクションを実行するようにしたいと考えています。具体的には、アクションはCategoryNameが存在するかどうかを確認することです。そうであれば、CategoryAmountが合計に追加され、そうでない場合は、新しいエントリがリストに追加されます。

自分自身より知識のある人との相談やリサーチではシングルトンを使用しているため、両方のページのビューモデルでExpenseListを見ることができます。私はSingletonインスタンスを作成するチュートリアルを見つけましたが、ページ1のView Modelで宣言したpublic/private要素から、複数のページで共有されるSingletonに移動する方法についてのガイドは見つかりませんでした。 TempExpenseEntryとExpenseListをシングルトンでインスタンス化する必要がありますか?カテゴリーリストはどうですか?これらの変数は、Singletonクラスで同じ方法で宣言されますか? 1ページと2ページだけがシングルトンのインスタンスを持っていますか?ページ固有のメソッドとイベントのサブスクリプションはどこで行われるべきですか?

私はコミュニティの指導に感謝します。私は周りを突きつけて、自分自身で仕事をして学ぶための具体的なことを得るが、実際には正しい方向に向かって振る舞いを使うことができる。

希望のお声をお聞かせ

Yusif Nurizade

答えて

-1

は、「あなたはdidnのなぜつまり、私はいくつかのコードなしでこれであなたを助けるために(と私は、コードが複雑であるという感覚を持っているために懸命です私が提案しているのは、Page1からすべての静的コードを取得し、それを新しいクラス(クラスAと呼んでください)にして静的ではないコードにします。今すぐあなたがしなければならないことは、クラスAをシングルトンにして、何でもデータにアクセスできるようにすることです。

UPDATE

OK。あなたのコメントを考えれば、私は次のようなことをします:

public class Singleton : DependencyObject, INotifyPropertyChanged 
{ 
    private static Singleton _Instance; 
    public static Singleton Instance 
    { 
     get 
     { 
      if (_Instance == null) 
       _Instance = new Singleton(); 
      return _Instance; 
     } 
    } 

    //Dependency Property  
    public static readonly DependencyProperty PropertyA = DependencyProperty.Register("A", typeof(string), typeof(Singleton)); 
    public string A 
    { 
     get { return GetValue(PropertyA).ToString(); } 
     set { SetValue(PropertyA, value); } 
    } 

    //Property 
    private int _B; 
    public int B 
    { 
     get { return _B; } 
     set 
     { 
      _B = value; 
      RaisePropertyChanged("B"); 
     } 
    } 

    static Singleton() 
    { 
     Instance = new Singleton(); 
    } 

    //INotifyPropertyChanged 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new new PropertyChangedEventArgs(propertyName)); 
    } 
} 

このクラスでは、これらのすべてのプライベート/パブリックプロパティを配置できるようになりました。私もDependencyObjectから継承されていて、ある場合はDependencyPropertiesです。 - それは、より意味のある答えを提供するのに役立つならば、私は、コードを提供することができます

<TextBlock Text="{Binding Source={x:Static Singleton.Instance}, Path=A}"/> 

OR

<TextBlock Text="{Binding Source={x:Static Singleton.Instance}, Path=B}"/> 
+0

返事をありがとう:あなたのその後

は、あなたがこのようにバインドすることができますXAML。私は明確にする必要があります - 現在のコードは、プライベート/パブリックgetとしてコード内の変数を持って、静的の使用を設定しません。これらのうちのいくつかはxamlコードに関連付けられています。シングルトンにコピーを貼り付けようとしたとき、コードは機能しなくなりました - 私が見逃しているディテールはありますか? –

関連する問題