2016-02-29 5 views
0

Сценарий: разработка «толстого» клиента в UWP с использованием C#, предназначенного для рабочего стола Windows 8.1/10 (приложение для магазина).Inline C# в интерфейсе XAML: почему это не работает в XAML?

В моем пользовательском интерфейсе, я попытался использовать следующую INLINE

<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, поэтому компилятор принимает это.

Что касается наилучшего решения вашей конкретной проблемы - условие в модели просмотра является хорошим. A TemplateSelector будет работать на стороне просмотра, но требует больше кода. Модель просмотра также может быть лучшим местом для ее размещения, если вы хотите проверить ее, так что это действительно правильный способ сделать это. Помещение логики в слой вида просто добавило бы код, который не может быть проверен модулем.

+1

Стоит отметить, что 'TemplateSelector', пожалуй, самая худшая часть платформы XAML и не является хорошим выбором. Я бы рекомендовал визуальное состояние, контролируемое чем-то в коде. –

+0

Вот как я в итоге решил это. Спасибо, Джерри! –

+0

Спасибо, Филипп, оцените понимание! –