【问题标题】:Generating sample XML data for Blend from Entity Framework data model?从实体框架数据模型为 Blend 生成示例 XML 数据?
【发布时间】:2009-09-16 14:35:18
【问题描述】:

在使用 MS Expression Blend 时,您可以从 XML 文件导入示例数据,以用于在设计模式下测试您的 XAML 和绑定。我的数据模型是使用实体框架在 XML 中完全定义的。是否有任何合理的方法可以直接或间接地使用该模型作为 Blend 样本数据的来源?这似乎是一个相当明显的用例,但我还没有找到任何关于如何做到这一点的示例。编写一个将我的 EF 类的实例序列化为 XML 的实用程序是我唯一的选择吗?

(我认为我不能使用指向实时数据源的链接,因为我使用的是带 WCF 的 Silverlight,而且我的数据模型是自动生成的代理类。如果有办法将 Blend 连接到一个 WCF 服务,我还没有找到它——尽管我很乐意得到一些指示。)

【问题讨论】:

    标签: expression-blend binding


    【解决方案1】:

    我仍然没有很好的答案。我尝试使用 DataContractSerializer 将我的 EF 类的一些实例序列化为 XML:

    DataContractSerializer serializer = new DataContractSerializer(typeof(Room));
    using (SlideLincEntities ctx = new SlideLincEntities())
    {
        Room roomWithMostSessions = ctx.Room
            .OrderByDescending(r => r.Sessions.Count)
            .FirstOrDefault();
        string fileName = ConfigurationSettings.AppSettings["outputFile"];
        Console.WriteLine("Writing data to file '{0}'", fileName);
        File.Delete(fileName);
        using (Stream fileStream = File.Open(fileName, FileMode.OpenOrCreate))
        {
            serializer.WriteObject(fileStream, roomWithMostSessions);
        }
    }
    

    很遗憾,Blend 无法读取生成的 XML:DataContractSerializer 使用 XML 引用表示法,这显然会混淆 Blend 简单的 XML 反序列化器。

    我还尝试使用 XAML 的对象表示法手动 (uggh) 生成示例数据:

    <rs:Room d:IsDataSource="True"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:rs="clr-namespace:SlideLinc.Client.Common.RoomService;assembly=SlideLinc.Client.Common"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d"
    Name="_default" OwnerId="smithkl42"
    >
        <rs:Room.Owner>
            <rs:RegisteredUser x:Name="ken"  UserId="ken"  Email="ken@hotmail.com"  FirstName="Ken" LastName="Smith" MaxFileUploadSize="20000" UserName="Ken Smith" />
        </rs:Room.Owner>
    </rs:Room>
    

    这更好,但出于某种原因,Blend 不会绑定到对象中的任何集合:我不知道为什么,因为 XAML 数据绑定错误当然会被默默地吞下。 (我有没有提到我多么讨厌 XAML 数据绑定?)

    我最终直接在 XAML 表单中定义了少量数据:

    <ListBox x:Name="fileListBox" Grid.Row="2" Margin="4" BorderThickness="0" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="25" />
                        <ColumnDefinition Width="150"/>
                        <ColumnDefinition Width="70" />
                        <ColumnDefinition Width="5" />
                        <ColumnDefinition Width="30" />
                    </Grid.ColumnDefinitions>
                    <Image Source="/Images/Word.png" Grid.Column="0" Margin="2" />
                    <TextBlock Text="{Binding OriginalFileName}" Grid.Column="1" VerticalAlignment="Center" />
                    <HyperlinkButton Content="Share"  Grid.Column="2" Margin="4"  HorizontalAlignment="Right" VerticalAlignment="Center"/>
                    <HyperlinkButton Grid.Column="4" Margin="4" HorizontalAlignment="Right" VerticalAlignment="Center" >
                        <Image Source="/Images/trashcan.png" Width="25" />
                    </HyperlinkButton>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <!-- I shouldn't have to do this, but for some reason, I can't get sample data any other way -->
        <roomservice:SharedFile OriginalFileName="Some Document.docx" />
        <roomservice:SharedFile OriginalFileName="Another document.pptx"/>
    </ListBox>
    

    这就是我目前的方法。不是很优雅。接受其他想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-15
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2017-10-04
      • 2011-03-23
      • 2011-04-28
      相关资源
      最近更新 更多