如果多个对象中的属性引用同一个对象实例,如何从对象实例中取消这些引用?
示例:
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?
}
}
编辑:详细说明,我有一组Signal对象,我用它作为传入数据的存储位置。指标可以绑定到Signal对象的Value属性,该属性将通过INotifyPropertyChanged(不在此示例中)在UI中更新。我想要的是,如果用户从SignalList中删除Signal对象,那么引用该Signal对象的各种属性应该反映这一点。
答案 0 :(得分:1)
这开始是一个评论,但它太长了,我也认为它可能会指向你想要的方向:
我猜你提到的INotifyPropertyChanged
接口是在Signal
类上实现的
我认为您应该将List
更改为ObservableCollection
。这将使您能够在添加或删除集合中的项目时处理事件
然后,您可以向Signal
类添加一个属性,指示它是否在集合中
从那里可以很容易地使用PropertyChanged
类中的IndicatorData
事件,如果信号从集合中删除,则会使信号无效。
这里可能存在问题的一件事是,没有什么能阻止您向多个集合添加相同的信号(如果您有多个SignalHandler
实例处理相同的Signal
实例)。