从属性对象

时间:2017-10-24 14:18:35

标签: c# wpf

如果多个对象中的属性引用同一个对象实例,如何从对象实例中取消这些引用?

示例:

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对象的各种属性应该反映这一点。

1 个答案:

答案 0 :(得分:1)

这开始是一个评论,但它太长了,我也认为它可能会指向你想要的方向:

我猜你提到的INotifyPropertyChanged接口是在Signal类上实现的 我认为您应该将List更改为ObservableCollection。这将使您能够在添加或删除集合中的项目时处理事件 然后,您可以向Signal类添加一个属性,指示它是否在集合中 从那里可以很容易地使用PropertyChanged类中的IndicatorData事件,如果信号从集合中删除,则会使信号无效。
这里可能存在问题的一件事是,没有什么能阻止您向多个集合添加相同的信号(如果您有多个SignalHandler实例处理相同的Signal实例)。