2016-02-29 25 views
0

場景:使用用於Windows 8.1/10(商店應用程序)桌面的c#在UWP中開發「厚」客戶端。XAML前端內聯c#:爲什麼不在XAML中工作?

在我的用戶界面,我試圖用下面的內嵌

<StackPanel Grid.Column="0"> 
    <TextBlock x:Name="Qty_Size_Crust" Margin="25,10,20,0" Padding="0,0,0,0" TextAlignment="Left" TextWrapping="Wrap" MaxHeight="25" Foreground="#ff230909" FontFamily="Segoe UI" FontSize="16" xml:space="preserve" HorizontalAlignment="Left"> 
if ({Binding WidgetName} == "Backend") 
{    
     <Run Text="{Binding ItemCode, Converter=ItemCodeToDescriptionConverter}"/> 
} 
else 
{ 
     <Run Text="See Administrator}"/> 
} 
    </TextBlock> 

編譯器會接受這一點,但在執行過程中,我既不會看到項目說明,也沒有見管理員。爲了這項工作,我還應該做些什麼?我可以通過將代碼放入ViewModel來解決這個問題,但是想知道爲什麼這樣做不起作用(或者它不應該)。

+0

http://www.codeproject.com/Articles/42980/How-to-embed-a-C-code-into-an-XAML-file – Gusman

+1

我希望,夥計。那會很酷。我認爲你正處於ASP.Net的思維模式。 C#只能存在於代碼隱藏中。不在聲明性代碼中。抱歉。 –

+0

我發誓我可以在XAML的舊版本中做到這一點。也許我的想法是...... –

回答

8

XAML不支持內聯腳本,因此答案很簡單 - 不支持。

在你的例子中 - 當TextBlock中運行文本時,條件代碼被簡單地添加,所以編譯器會接受它。

至於你的具體問題的最佳解決方案 - 視圖模型中的條件是一個很好的解決方案。一個TemplateSelector將在視圖方面工作,但需要更多的代碼。如果你想測試它,View模型實際上也許是最好的放置它的地方,所以它確實是正確的方法。將邏輯放入視圖層只需添加無法進行單元測試的代碼。

+1

值得指出的是'TemplateSelector'可能是XAML平臺中表現最差的部分,並不是一個好選擇。我會推薦一種由代碼隱藏內容控制的視覺狀態。 –

+0

我最終如何解決這個問題。謝謝傑瑞! –

+0

謝謝菲利普,感謝洞察! –