2009-09-16 52 views
0

在使用MS Expression Blend時,您可以從XML文件導入樣本數據以用於在設計模式下測試您的XAML和綁定。我的數據模型使用實體框架在XML中完全定義。是否有任何合理的方式直接或間接地將該模型用作Blend樣本數據的來源?看起來這是一個相當明顯的用例,但我還沒有找到如何做到這一點的任何示例。我唯一的選擇是編寫一個將我的EF類的實例序列化爲XML的實用程序嗎?我不認爲我可以使用鏈接到實時數據源,因爲我使用的是Silverlight w/WCF,而我的數據模型是自動生成的代理類。如果有一種方法可以使Blend up到WCF服務,我還沒有找到它 - 雖然我很樂意得到一些指針。)爲Entity Framework數據模型的Blend生成示例XML數據?

回答

0

我仍然沒有一個很好的答案。我試着用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); 
    } 
} 

不幸的是,混合無法讀取生成的XML:DataContractSerializer的使用XML參考符號,這顯然混淆了混合的簡單的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="[email protected]" FirstName="Ken" LastName="Smith" MaxFileUploadSize="20000" UserName="Ken Smith" /> 
    </rs:Room.Owner> 
</rs:Room> 

這是更好的,但由於某些原因,混合不會結合到對象內的任何集合:我不不知道爲什麼,因爲當然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> 

這就是我目前的做法。不是很優雅。打開其他想法。

相關問題