0

场景:在 UWP 中开发一个“厚”客户端,使用 c# 用于 Windows 8.1/10 桌面(一个商店应用程序)。

在我的用户界面中,我尝试使用以下内联

    <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 中来解决这个问题,但想知道为什么这不起作用(或者它不应该起作用)。

4

1 回答 1

8

XAML 不适用于内联脚本,因此答案很简单——它不受支持。

在您的示例中 - 条件代码只是在 TextBlock 中运行文本时添加,因此编译器接受它。

至于您的特定问题的最佳解决方案 - 视图模型中的条件是一个很好的条件。ATemplateSelector可以在视图方面工作,但需要更多代码。如果您希望能够测试它,视图模型实际上也可能是放置它的最佳位置,因此它确实是正确的方法。将逻辑放入视图层只会添加无法进行单元测试的代码。

于 2016-02-29T17:58:55.140 回答