2016-09-27 67 views
-2

在安裝了最新更新的Visual Studio 2015中,爲Windows 10 UAP執行項目。我創建了一個用戶控制是這樣的:爲什麼用戶控件不加載設計時間數據

<UserControl 
x:Class="App3.CustomControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:App3" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="300" 
d:DesignWidth="400"> 

<Grid> 
    <GridView x:Name="gridView" ItemsSource="{Binding Elements}"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Grid Width="50" Height="50" Background="Bisque"> 
        <TextBlock Text="{Binding}"/> 
       </Grid> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 

</Grid> 

代碼背後:

namespace App3{ 
public sealed partial class CustomControl : UserControl 
{ 
    public CustomControl() 
    { 
     this.InitializeComponent(); 
     this.DataContext = new MainViewModel(); 
    } 
} 

}

MainViewModel

public class MainViewModel 
{ 
    public List<int> Elements { get; set; } 

    public MainViewModel() 
    { 
     Elements = Enumerable.Range(0, 100).ToList(); 
    } 
} 

我補充一點,用戶控件到的MainPage和我 執行應用程序。我在屏幕上看到100個元素。大!但由於我無法執行和編譯數百萬次,我期望設計時間數據能夠幫助我。 enter image description here

編輯UserControl時,我什麼都看不到!但是當在MainPage中我看到正在加載的元素。

我期望在同一個用戶控件中看到正在加載的數據,因爲這是我想要設計,編輯樣式或加載數據的地方。

任何幫助?謝謝。

回答

1

我期望在同一個用戶控件中看到正在加載的數據,因爲這是我想要設計,編輯樣式或加載數據的地方。

要做到這一點,你應該在XAML中設置DataContext

<UserControl.DataContext> 
    <local:MainViewModel x:Name="viewmodel" /> 
</UserControl.DataContext> 

,並在您CustomControl背後的代碼,刪除DataContext

public CustomControl() 
{ 
    this.InitializeComponent(); 
    //this.DataContext = new MainViewModel(); 
} 

您可以爲波紋管看到:

enter image description here

+0

嗨,Grace,它的作品,但只是好奇。設計師不應該在InitializeComponent之後運行代碼嗎?如果我把不工作的UserControl放在另一個UserControl中,在構造函數中輸入datacontext,我也可以看到它。 – toroveneno

+1

@FernandoUrkijoCereceda,如果在'InitializeComponent'之前在佈局中放置了一個'TextBox',它也可以在設計器中看到。 'InitializeComponent'是做什麼的?找到[答案](http://stackoverflow.com/questions/245825/what-does-initializecomponent-do-and-how-does-it-work-in-wpf)。在初始化之前,控制器可以在設計器中看到,但在這裏'GridView'中,如果找不到這些項目,則不會顯示任何內容。如果你在後面的代碼中設置了'DataContext',它只能在構建完成後才能得到,這就是爲什麼你可以看到如果你在xaml中設置'DataContext'。 –

1

另一種方式來做到這一點是利用d的:使用的DataContext:

d:DataContext="{d:DesignInstance {x:Type local:MyViewModelSample},IsDesignTimeCreatable=True}"> 

將引用設計時只查看模式。

相關問題