【发布时间】:2021-11-05 15:48:00
【问题描述】:
我正在关注 BookStore 数据绑定示例,记录在 XAML controls; bind to a C++/WinRT property,直到并包括“将按钮绑定到 Title 属性”部分。
我的起点是 Visual Studio 中的一个新的“Blank App, Packaged (WinUI 3 in Desktop)”项目。
[编辑] 从用于 UWP 应用的“空白应用 (C++/WinRT)”项目开始,可以完美运行。 “桌面中的 WinUI 3”项目仍然存在此问题。
初始数据绑定有效,按钮内容L"Atticus" 是从 BookSku 标题属性中读取的。但是,按照文章中的指示在点击处理程序中调用 MainViewModel().BookSku().Title(L"To Kill a Mockingbird"); 会引发异常
Exception thrown at 0x00007FFC801B4ED9 (KernelBase.dll) in BookStore.exe: WinRT originate error - 0x8001010E : 'The application called an interface that was marshalled for a different thread.'.
单步执行代码,调用
m_propertyChanged(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"Title" });
in void BookSku::Title(hstring const& value) 是从内部引发异常的地方。
我可以手动更改按钮内容,而不是通过绑定属性。
Data binding in depth 文章中的第一个示例描述了一个非常相似的数据绑定场景,虽然稍微简单一些。它抛出相同的异常。
我正在使用最新的 Microsoft.Windows.CppWinRT 版本 2.0.210825.3 和 Windows App SDK 版本 0.8.3
【问题讨论】:
标签: c++ windows-runtime winrt-xaml c++-winrt