示例数据和隐式数据类型datatemplates

时间:2012-08-06 10:10:32

标签: wpf visual-studio-2010 xaml

几个Wpf控件没有可视化表示,除非它们有一些数据(例如ItemsControl)。因此,要在Visual Studio设计器中查看它们的布局,您需要使用DesignData XAML扩展来使用可以呈现的内容填充它们。这些控件的一个常见用法是定义几个隐式类型的数据窗口,以便控件可以显示各种类型。

然而,在我看来,设计师对这种最简单的布局几乎没有任何支持,这对我们来说几乎没用,但我希望我错了,我只是忽略了一些东西。以下是我的看法(为简洁省略了xmlns名称空间)。

<UserControl
    d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">

    <Grid>
        <ItemsControl>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ListBoxItem>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding FirstName}"/>
                            <TextBlock></TextBlock>
                            <TextBlock Text="{Binding LastName}"/>
                        </StackPanel>
                    </ListBoxItem>
                </DataTemplate>
            </ItemsControl.ItemTemplate>

        </ItemsControl>
    </Grid>

</UserControl>

以上工作原理是设计人员正确显示样本数据,以便验证布局。但是没有隐含的数据类型使得这种方法对于显示多种类型毫无用处。

<UserControl
    d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">

    <Grid>
        <ItemsControl>

            <ItemsControl.Resources>
                <DataTemplate DataType="{x:Type local:Customer}">
                    <ListBoxItem>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding FirstName}"/>
                            <TextBlock></TextBlock>
                            <TextBlock Text="{Binding LastName}"/>
                        </StackPanel>
                    </ListBoxItem>
                </DataTemplate>
            </ItemsControl.Resources>

        </ItemsControl>
    </Grid>

</UserControl>

以上在运行时工作正常,可以添加其他隐式数据类型的tempates,使控件能够显示多种类型。美国大麻大小的软膏虽然是设计师愚蠢地显示原始的ToString()输出,使得这种方法无法用于开发UI。

此外,无论您在哪里定义模板,将它放在UserControl或App资源中,结果都是相同的,nada也没什么区别。据我所知,没有办法在XAML中支持任何形式的条件编译,并且类型的构造函数不是由设计者运行的,所以即使代码背后的解决方案似乎也不太可能。

我们正处于一个移植大型数据应用程序的项目的开始,该应用程序将需要我们设计大约200个UI,并且这些UI中的许多都埋藏在应用程序的深处。缺乏任何能够使用显示的设计数据开发这些UI的方法已经损害了我们的生产力并且可能会变得更糟。

是否还有其他人遇到类似问题以及存在哪些解决方案或解决方法?

1 个答案:

答案 0 :(得分:1)

根据我的经验和我认为,解决此问题的方法是将IDE设置为“在XAML视图中打开XAML文件”。

换句话说,不要使用设计师。

如果您需要使用设计器,请打开Blend,绘制设计,然后将它们集成到您的应用程序中。您可以单独查看每个视图。您只需在正在运行的应用程序的上下文中查看整合布局。我使用过的效率最高的WPF和Silverlight开发人员使用这种方法。