問題タブ [mvvm-toolkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - Model クラスの INotifyPropertyChanged
Model クラス、ViewModel クラス、またはその両方に INotifyPropertyChanged を実装することは一般的に望ましいことですか? ビューモデルではなく、モデルのみに実装することは可能ですか? 不可能なモデルの場合、その理由
xaml - タイマーから PropertyChanged イベントを発生させると COMException が発生するのはなぜですか?
Raspberry Pi の下で実行される XAML を使用して、ユニバーサル Windows プラットフォーム アプリを開発していWindows 10 IoT Core
ます。アプリは、I2C バス上の温度センサーを駆動します。センサークラスはMLX90614Thermometer
. センサーは aDispatcherTimer
を使用して 100 ミリ秒 (約) ごとに読み取り値を取得し、移動平均を更新します。移動平均の値が指定されたしきい値を超えて変化すると、センサーはイベントを発生させValueChanged
、イベント引数に新しい値を提供します。
私の ViewModel クラス ではTemperatureSensorViewModel
、センサーのイベントをサブスクライブし、それを使用して、およびValueChanged
という名前のバインドされたプロパティを更新します。これらのプロパティは、XAML UI のテキスト ブロックにバインドされています。イベント ハンドラは次のとおりです。Ambient
Channel1
Channel2
Ambient
...そして、これは...のサンプル データ バインディングです。
私はMVVM Light Toolkitを使用しているため、プロパティは次のように実装されています (Ambient
表示されているだけですが、名前以外は同じです)。
MVVM Light Toolkit は、設定されているプロパティの通知Set()
を自動的に発生させるメソッドを提供します。PropertyChanged
ボタンの押下に応答してセンサーから単一のサンプルを読み取った場合、これは正しく機能します。ただし、自動サンプリング モード (タイマー ベース) を有効にするとすぐに、スローが開始されますCOMExceptions
。したがって、これはタイマーに関連するある種のスレッドの問題である必要があります。
ここで、私の理解が正しければ、ランタイムはPropertyChanged
通知を UI スレッドに自動的にマーシャリングすることになっています。スタック トレースを見ると、そのように見えます。しかし、最終的にはCOMException
. うーん。
何?ここで何が起こっているのかわかりません。誰が問題が何であるかを見ることができますか?