c#访问器未被引用调用

本文关键字:引用 调用 访问 | 更新日期: 2023-09-27 18:08:11

我的问题如下。我有一个类的属性:

public partial class GraphView : UserControl
{
    private ObservableChartDictionary _dictionary;
    public ObservableChartDictionary dictionary
    {
        get
        {
            return _dictionary;
        }
        set
        {
            this._dictionary = value;
            this.signals = ChartConverter(value);
        }
     }
 }

我稍后使这个属性等于另一个对象。

 myGraphView.dictionary = this.dictionary;

当我这样做时,属性的setter会很好地运行。这也意味着

 this.signals = ChartConverter(value);

执行。如果我改变引用的对象,"this。该值出现在"myGraphView"中。Dictionary ",但setter不会执行,转换也不会发生。

我该如何解决这个问题?我的类ObservableChartDictionary也实现INotifyPropertyChanged,但事件没有在"myGraphView"中引发。字典"。请帮助!

c#访问器未被引用调用

这可能是因为您正在以某种方式更改字典,例如

this.dictionary.someproperty ... or this.dictionary.someMethod(...)

这样setter属性不会被触发。它只是改变了你的字典的内容,而对它的其他引用看到了这些变化。

。Dictionary =某事触发set属性

如果您想检测更改,这段代码可能会有所帮助:

    public class ObservableChartDictionary<TKey, TValue> : Dictionary<TKey, TValue>, INotifyPropertyChanged
    {
        public void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        public TValue this[TKey key]
        {
            get { return this[key]; }
            set
            {
                base[key]= value;
                OnPropertyChanged(key.ToString());
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

observableDictionary只适用于graphView,对吧?如果你想连接它们,为什么不直接将ObservableChartDictionary实例链接到一个实际的图视图。

public class ObservableChartDictionary
{
    public GraphView linkedGraph { get; set; }
    public ObservableChartDictionary(GraphView linkedGraph)
    {
        this.linkedGraph = linkedGraph;
    }
    //...      
}

则可以在字典更改时(例如,属性通知更改)从字典本身更新值:

        if (linkedGraph != null)
        {
             linkedGraph .signals = ChartConverter(this);
        }

所以每次你添加一个条目或改变一些东西时,它都会更新图。

你甚至可以创建一个嵌套类来显示它们是紧密连接的