我目前正在使用WPF中的Windows桌面应用程序。它是围绕MVVM模式构建的,因此视图在Telerik库的帮助下通过INotifyPropertyChanged绑定到viewmodel。整个应用程序运行良好,但一个模块需要来自硬件仪器的消息。该仪器仅通过WndMessage发送信息,这意味着我们实现了WndProc方法。
WndProc方法按预期工作,但视图未收到任何绑定调用。我们测试了WndProc之外的绑定,它们运行良好。遗憾的是,我们试图通过调用和手动刷新来触发通知,但无济于事。
在WndProc期间,是否有办法让通知消息到达视图?我提供了代码片段,但代码本身非常简单。
数据绑定
public List<PlotCoordinate> PointsList
{
get
{
return _pointsList;
}
}
WndProc消息接收
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
MainWindowViewModel viewModel = _dataContext;
InstrumentViewModel instrument = viewModel.InstrumentViewModelReference as InstrumentViewModel;
instrument?.ProcessMessage(hwnd, msg, wParam, lParam, ref handled);
return IntPtr.Zero;
}
WndProc中的数据操作
public void DrawGraphFromInstrumentData()
{
// Clear previous data and prepare new series
_pointsList = new List<PlotCoordinate>();
// ... fill the list with new data
OnPropertyChanged("PointsList");
}
非常感谢任何见解。
修改
经过一番愚弄,我觉得我设法找出了问题所在。问题不在于_dataContext
,而是在这一行:
InstrumentViewModel instrument = viewModel.InstrumentViewModelReference as InstrumentViewModel;
使用_dataContext
直接激活PropertyChanged
,但使用instrument
则不会。我会继续研究这个。
答案 0 :(得分:0)
使用char *bookings[][0]=firstname, *bookings[][1]=secondname, *bookings[][2]=dob;
代替您的ObservableCollection<PlotCoordinate>
。添加到此列表时,请确保在UI线程上,并且您的View应该识别何时添加新项目,而不是仅在更改List本身时。