订阅物业变更事件

时间:2014-02-17 17:28:12

标签: c# wpf chromium-embedded

我有传感器类和测试类。每个测试对象都有一个传感器阵列。我的MainWindow类有一个Test Object。传感器类扩展了INotifyPropertyChanged,我设置了一个事件,以便在某个属性发生变化时进行广播。我的问题是,我不知道如何在MainWindow类中订阅这些事件。 MainWindow拥有一个Chromium Embedded窗口,包含在CefSharp中。我没有需要更改的UI元素,只需要在事件发生时调用函数/方法。

这是我目前正在尝试的,但是在操作员的右侧不允许继续收到有关该属性的错误?

传感器类

//Event for when new data is placed into temp_readings
public event PropertyChangedEventHandler PropertyChanged;

//Adds a new reading to the data set
public void addReading(float reading)
{
    this.temp_readings.Add(reading);
    OnPropertyChanged(new PropertyChangedEventArgs("new_data_id" + this.id));
}

//Raises an event that new readings have been added
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, e);
    }
}

在MainWindow

private void InitializeWebView()
{
    //Disable Caching
    BrowserSettings settings = new BrowserSettings();
    settings.ApplicationCacheDisabled = true;
    settings.PageCacheDisabled = true;
    settings.FileAccessFromFileUrlsAllowed = true;

    //Initialize WebView
    this.webView = new WebView(index, settings);

    //View Property Event Handlers
    this.webView.PropertyChanged += this.webViewPropertyChanged;

    //Event handlers for new data added to sensors
    for (int x = 0; x < this.test.sensors.Length; x++)
    {
        this.webView.PropertyChanged += this.test.sensors[x].PropertyChanged;
    }

    //Load it into the XAML Grid
    main_grid.Children.Add(webView);
}

我看到的所有示例都是为WPF端的按钮或其他东西设置它们,并绑定到类中的数据。我想在传感器的数据阵列发生任何变化时,只需在MainWindow类中触发一个方法。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我明白了。我必须在Sensor类中分配我想要Event的函数来调用。这是我的新代码

//Event handlers for new data added to sensors
for (int x = 0; x < this.test.sensors.Length; x++)
{
    this.test.sensors[x].PropertyChanged += handleStuff;
}

其中,handleStuff是MainWindow类中某处定义的函数。