2017-10-24 1 views
0

複数のオブジェクトのプロパティが同じオブジェクトインスタンスを参照している場合、オブジェクトインスタンス内からそれらの参照を無効にするにはどうすればよいですか?プロパティオブジェクト内からプロパティを無効にする

例:

class Main { 
    private SignalHandler _signalHandler; 
    public IndicatorData Indicator1 { get; set; } 
    public IndicatorData Indicator2 { get; set; } 
    public IndicatorData Indicator3 { get; set; } 

    public Main() { 
     _signalHandler = new SignalHandler(); 
     _signalHandler.SignalList.Add(new Signal()); 
     _signalHandler.SignalList.Add(new Signal()); 
     Indicator1 = new IndicatorData() { Name = "Indicator 1", 
              Signal = _signalHandler.SignalList[0] }; 
     Indicator2 = new IndicatorData() { Name = "Indicator 2", 
              Signal = _signalHandler.SignalList[1] }; 
     Indicator3 = new IndicatorData() { Name = "Indicator 3", 
              Signal = _signalHandler.SignalList[0] }; 

     // Indicators binding to Signal.Value property in Indicator1 and Indicator3 
     // now gets updated through INotifyPropertyChanged. 
     _signalHandler.SignalList[0].Value = 123; 

     // Removing first element from the SignalList. 
     _signalHandler.SignalList[0].Remove(); 
    } 
} 

class SignalHandler { 
    public SignalHandler() { 
     SignalList = new List<Signal>(); 
    } 
    public List<Signal> SignalList { get; set; } 
} 

class IndicatorData { 
    public string Name { get; set; } 
    public Signal Signal { get; set; } 
} 

class Signal { 
    public int Value { get; set; } 
    public void Remove() { 
     // How can I now set all properties referring 
     // to the Value property above to null? 
    } 
} 

EDIT:詳述すると、私は私が入ってくるデータの格納場所として使用し、信号オブジェクトのコレクションを持っています。インジケータは、SignalオブジェクトのValueプロパティにバインドできます。このプロパティは、INotifyPropertyChanged(この例ではありません)を通じてUIで更新されます。私が望むのは、ユーザーがSignalListからSignalオブジェクトを削除すると、そのSignalオブジェクトを参照するさまざまなプロパティがこれを反映する必要があるということです。

+2

これは奇妙なOOPパターンのようです。代わりにここで達成しようとしていることを教えてください。 – decPL

+0

私に全面的な混乱のように見えます。同じインスタンスを参照するプロパティが2つ以上必要なのはなぜですか?それは意味をなさない。 –

+0

変数はオブジェクトを参照し、オブジェクトは変数を参照しません –

答えて

1

これはコメントとして始まったが、それはあまりにも長くなってきたし、私もそれはあなたが行きたい方向にあなたを指すかもしれないと思う:

私はあなたが言及したINotifyPropertyChangedインタフェースがSignalに実装されている推測していますクラス。
ListObservableCollectionに変更する必要があります。これにより、コレクションに項目を追加または削除するときにイベントを処理できます。
次に、Signalクラスにプロパティを追加して、コレクションに含まれているかどうかを示すことができます。
PropertyChangedクラスのイベントは、IndicatorDataクラスで使用するのが簡単で、コレクションから削除された信号は無効になります。
ここで問題になる可能性があるのは、複数のコレクションに同じ信号を追加することを止めることがないことです(同じSignalインスタンスを処理するSignalHandlerの複数のインスタンスがある場合)。

+0

はい、私はINotifyPropertyChanged(あるいは、INotifyPropertyChanged(https://www.danrigby.com/2015/09/12/inotifypropertychanged-the-net-4-6-way/)を実装するBindableBaseを使用しています)。 ObservableCollectionも使用しています。この例を単純にしたいだけです。 いずれにせよ、私は本当にあなたの考えが好きです。 Signalオブジェクトに「kill」プロパティを設定するだけで、通知を起動し、参照オブジェクトがSignalオブジェクト内から参照を試みるのではなく参照を無効にするようにします。 – Oystein

+0

しかし、それの地獄のために、もともと私が尋ねたことをすることは可能ですか?オブジェクトがそれを参照するプロパティを持つ親オブジェクトを「見つける」ことは可能ですか? – Oystein

+1

そのための具体的なコードを書いているわけではありません。コレクションに追加または削除するときにオブジェクトの状態を変更するものはありません。 –

関連する問題