2010-10-20 63 views
1

我目前正在调查在Expression Blend 4中的Silverlight项目中构建用户控件。该控件具有用于用户控件的相关联的一组示例数据,并且数据在用户控制。MainPage.xaml中的Silverlight用户控件

当我将用户控件放在主页上时,示例数据不会出现在用户控件中。这是正确的行为,还是我设置/不设置的东西?我发现奇怪的是,当我编辑用户控件时,数据与重建指示符(黄色感叹号)一起出现在主页面中。当我重建时,数据再次消失。

这是主页代码:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SilverlightApplication2" mc:Ignorable="d" 
x:Class="SilverlightApplication2.MainPage" 
Width="1200" Height="640"> 
<UserControl.Resources> 
    <local:MultiDayViewModel x:Key="MultiDayViewModelDataSource" d:IsDataSource="True"/> 
</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White" d:DataContext="{d:DesignData /SampleData/TestSampleData.xaml}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="0.128*"/> 
     <RowDefinition Height="0.872*"/> 
    </Grid.RowDefinitions> 
    <StackPanel Margin="0,24,8,8" HorizontalAlignment="Right" Width="318" Orientation="Horizontal"> 
     <Button Content="Daily"/> 
     <Button Content="Weekly"/> 
    </StackPanel> 
    <local:MultiDayView x:Name="MultiDayView" Margin="8" Grid.Row="1" DataContext="{Binding Calenar, Source={StaticResource MultiDayViewModelDataSource}}"/> 
</Grid> 

任何想法或方向将不胜感激。

谢谢。

+0

运行时也不会显示示例数据。我将这个问题作为一个单独的问题提出,但我感觉这两个问题是相关的。任何线索? – Jason 2010-10-20 03:37:25

回答

2

您正在使用d:DataContext,它只出现在设计模式中。将控件放置在MainPage中时,Blend将其解释为处于运行时模式,因此数据不会出现,因此这是预期的行为。

当您在Blend中为您控制创建示例数据时,您可以指定是否希望在运行时使用此示例数据,或者您可以简单地设置DataContext属性来代替或除了d:DataContext属性。

下图显示了如何启用运行时的样本数据,当您从混合的样本数据来源:

Enable sample data when application is running

当您选择称为“启用样本数据时,应用程序正在运行的选项“,您的XAML如下所示:

<UserControl 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="ASD_Answer002.MainPage" 
     Width="640" Height="480"> 
     <UserControl.Resources> 
      <DataTemplate x:Key="DataTemplate1"> 
       <CheckBox Content="{Binding Property1}" IsChecked="{Binding Property2, Mode=TwoWay}"/> 
      </DataTemplate> 
     </UserControl.Resources> 

     <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}"> 
      <ItemsControl ItemsSource="{Binding Collection}" ItemTemplate="{StaticResource DataTemplate1}" Margin="50"/> 
     </Grid> 
    </UserControl> 

这将显示设计时和运行时的示例数据。

+0

谢谢Murven,我尝试了这种方法,但编译器不喜欢DataContext引用,因为“DesignData”不在Blend 2008命名空间中。 – Jason 2010-10-20 03:59:26

+0

这是正确的,我已经更新了我的答案,以包括在Blend中使用选项时XAML的外观如何在运行时启用示例数据。 – Murven 2010-10-20 04:26:07

+0

我也注意到你正在声明本地的一个实例:MultiDayViewModel。如果将DataContext和d:DataContext都设置为指向该视图模型实例,则可以使该实例为您的属性返回模拟数据,并且这会在设计和运行时显示数据。如果您创建一个ViewModelLocator,在设计时返回模拟视图模型,并在运行时返回实际视图模型,这会更有用。 – Murven 2010-10-20 04:41:47

相关问题