如果多个对象中的属性引用同一个对象实例,那么如何从对象实例中取消这些引用?
示例:
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?
}
}编辑:详细说明,我有一个信号对象的集合,我使用这些对象作为输入数据的存储位置。指示符可以绑定到信号对象的Value属性,该属性将通过INotifyPropertyChanged在UI中更新(在本例中不是这样)。我想要的是,如果用户从SignalList中移除信号对象,引用该信号对象的各种属性应该反映这一点。
发布于 2017-10-25 05:12:54
这开始是作为一个评论,但它太长了,我也认为它可能会指向你想要去的方向:
我猜您提到的INotifyPropertyChanged接口是在Signal类上实现的。
我认为您应该将List更改为ObservableCollection。这将使您能够在从集合中添加或移除项时处理事件。
然后,您可以向Signal类添加一个属性,指示它是否在集合中。
从那里可以很容易地在PropertyChanged类中使用IndicatorData事件,如果信号被从集合中移除,则对其进行空化。
这里可能存在问题的一点是,没有什么可以阻止您向多个集合添加相同的信号(如果您有处理同一个Signal实例的多个Signal实例)。
https://stackoverflow.com/questions/46912945
复制相似问题