Microsoft.Toolkit.Mvvm(MVVM Toolkit)的相容性問題
結論:.net framework框架下的wpf專案使用Microsoft.Toolkit.Mvvm需慎重。
Microsoft.Toolkit.Mvvm是MVVM Light的接力者,今天在目標框架為framework4.6.1的wpf專案中使用Microsoft.Toolkit.Mvvm7.1.1出現了一個離譜的編譯時錯誤,前提是打開了工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟)。(Visual Studio 2019 16.10以上版本)
相關連結:https://docs.microsoft.com/zh-cn/visualstudio/xaml-tools/xaml-design-time-sample-data?view=vs-2019
定義如下類:
public class Class1 : Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject { }
然後在xaml檔案中使用它:
<Window.Resources>
<local:Class1 x:Key="bbb"/>
</Window.Resources>
標紅處報錯:XDG004無法分配指定的值。應是以下型別:"Object" ,導致當前xaml設計器無法正常顯示,但啟動程式的話,正常執行。
將xaml程式碼改為:
<Window.DataContext> <local:Class1 x:Name="aaa"/></Window.DataContext>
標紅處報錯報錯:XDG004無法分配指定的值。應是以下型別:"Object" XDG004附加的屬性"Name"只能應用到從"Obiect"派生的型別。 ,導致當前xaml設計器無法正常顯示,啟動程式的話,正常執行。
這個錯誤就很離譜,然後我修改了Class1類,將其父類刪除:
public class Class1 { }
程式沒有報錯。這時我將Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject 重新作為Class1 類的父類,並將工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟)
將工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟) 關閉後,程式不再報錯。
這時我另創一個基於.net 5的wpf專案如上進行實驗,錯誤竟然消失了。猜測是因為Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject 中頻繁使用的可空引用型別,導致 工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟) 關這個功能異常,這個特性C#8.0才有,而Framework最高支援C#7.3。關閉該功能,可以解決問題。但我不知道是否還有其它隱患?Microsoft.Toolkit.Mvvm是一種很新的MVVM框架,對於基於.net framework的wpf專案,還是使用MVVM Light比較穩妥。
相關連結:https://docs.microsoft.com/zh-cn/windows/communitytoolkit/mvvm/introduction