2010-10-20 22 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