2013-07-05 55 views
14

我剛剛在使用VS2012,WPF 4.5和設計時數據(特別是DesignInstance屬性)時遇到了幾個小時問題。DesignInstance無法在VS2012中工作

目標:我想有設計時的數據支持(MVVM爲基礎的),無論是在VS2012和混合我的WPF的項目,我不能爲我的生活,享受MVVMLight方法工作一貫

所以我嘗試使用內置的設計時數據支持,使用Blend提供的標記擴展來更改爲「恰好」。

問題:請看下面的代碼:

<Window x:Class="Nova.View.AlertsView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:Nova.View" 
     xmlns:vm="clr-namespace:Nova.ViewModel" 
     mc:Ignorable="d" 
     DataContext="{Binding Alerts, Source={StaticResource Locator}}" 
     d:DataContext="{d:DesignInstance vm:DesignAlertsViewModel, IsDesignTimeCreatable=True}" 
... /> 

無論VS2012和Blend報告「的名字DesignAlertsViewModel沒有命名空間中的CLR命名空間存在:Nova.ViewModel」,儘管智能感知解決它只是很好,你已經檢查了一千次,名字空間和類名都是正確的。

+0

我以前有過類似的問題,並且認爲我必須註釋掉有問題的行並編譯程序集,然後在將它添加回來時工作正常。 – AlSki

+0

我唯一的其他建議是使用完整語法,並且包括Type =即d:DataContext =「{d:DesignInstance Type = vm:DesignAlertsViewModel,IsDesignTimeCreatable = True}」 – AlSki

+0

謝謝,@AlSki,我_did_嘗試完整的語法,但沒有運氣。設計時數據最初出現,但最終停止工作(只是消失,沒有給出錯誤)。我已經將我的「解決方案」更新爲「解決方案」,並且會進一步深入研究。 – Thomas

回答

8

解決方法:確保設計時數據類與視圖本身位於同一個命名空間中。將DesignAlertsViewModel移動到View命名空間後,VS2012和Blend設計師立即開始使用設計時數據。

更新:這是現在的解決方法,直到我到達問題的底部。但是,就我而言,這是使設計時數據一致工作的唯一方法。當然,如果沿着這條路線走下去,你就會改變類名 - 顯然,DesignAlertsViewModel不再是視圖模型。現在它只是一個包含設計時數據的POCO。所以也許AlertsDesignData會是一個更好的名字。我對我的設計時數據存在於我的View命名空間下並不滿意,但它工作正常。

我也鼓勵你看看Laurent's article from MSDN Magazine, April 2013。我喜歡這種方法,因爲它更多地執行MVVM模式:設計時數據服務/提供程序通過IOC注入,因此即使在設計時您的視圖模型也會「運行」。

更新2:在花費了4個小時後,我認爲陪審團仍然在哪個方法上更好:我們應該使用簡單的POCO數據類還是MVVMLight方法,使用IOC進行設計 - 時間數據服務?前者簡單並且需要較少的代碼,後者對MVVM方法更爲真實,並在一定程度上鍛鍊了真實視圖模型,並且可能會揭示一些錯誤。

而且,我也不得不重新啓動VS幾次我重構到MVVMLight進近過程中 - 設計時數據就這麼消失了,來到一個VS重啓後回來。不過,現在看起來已經足夠穩定了,我不能再進一步指出這一點。

+0

(沒有downvote兄弟)這真的不是解決方案。你不*有*做到這一點,我可以保證。可能還有其他事情正在發生。設計時間數據可能非常敏感,並且不會很好地報告錯誤。我建議將虛擬機移回適當的位置,清理解決方案,重新啓動VS並重試。意識到還有另一個運行設計界面的進程(XDesProc.exe),這是一個缺乏安全感的問題。它需要引用您最新的內置程序集。如果它有一箇舊版本,你可能會遇到這個問題。 – Will

+0

好吧,公平的,我已經更新了我自己的答案,以澄清應該被認爲是現在的解決方法。然而,我仍然認爲,對於某些人來說,這可能是一種完全不錯的方法 - 只需將POCO與設計時數據(我知道這樣的POCO不再是視圖模型,請參閱我對命名的評論)。我同意設計師看起來很麻煩 - 這使得很難給出任何「保證」,如何使事情工作,恕我直言;;)如果你有一個更好的方法,一貫工作的經驗,請讓我知道! – Thomas

27

我在VS2013中遇到了這個錯誤,然後發現了這個問題。經過多次搜索之後,我找到了一個幫助我解決問題的答案。

代替

d:DataContext="{d:DesignInstance vm:DesignAlertsViewModel, IsDesignTimeCreatable=True}" 

使用

d:DataContext="{d:DesignInstance d:Type=vm:DesignAlertsViewModel, IsDesignTimeCreatable=True}" 

我所用」 ... d:DesignInstance類型= VM:...「並顯示與上述相同的錯誤當我加入。‘d:’一切正常

這裏是線程我發現,幫助

https://stackoverflow.com/a/21690404/2892400

7

檢查的。」目標平臺「在您的構建配置設置爲」 AnyCPU」我的設置爲‘’,所以設計師在抱怨缺少的類型。

VS是在32位運行,這樣也許有一個問題與從64執行代碼位組件。

我試圖在「Blend for Visual Studio」中打開我的UserControl時發現瞭解決方案。它對我來說顯示了一個完美的例外。

P.S .:使用接受的答案:使用「d:Type = vm:DesignAlertsViewModel」而不是「vm:DesignAlertsViewModel」我的控件是可見的,但沒有顯示任何示例數據。

+2

是的,設置x86正在爲我工​​作。非常感謝!。 – Juanin

+0

我只是打開「配置管理器」,並刷新了視覺工作室......現在可以工作。 – Finickyflame

+0

此問題自VS2017 15.5.6起持續存在。考慮加強問題:https://developercommunity.visualstudio.com/content/problem/63741/the-xaml-designer-cannot-resolve-types-from-the-cu.html – Terrence

0

我發現DesignInstance不適用於我的.NET 3.5和.NET 4.0項目,而它在> = .NET 4.5項目中工作(項目相同,它們通過使用鏈接共享相同的文件) 。

相關問題