2013-01-11 25 views
0

我一直是一個XAML開發人員多年,但這一個已經難倒我。我一直在睡覺,所以也許我很密集。Windows商店應用程序設計時DataContext

我只注意到Windows Store應用程序,我注意到LayoutAwarePage有一個DefaultViewModel這些日子,這很好,但我只在運行時才設置。真的,我們需要在設計時建立一個DataContext來查看真假數據。

所以多用一些令人費解的視圖模型掛鉤代碼失敗後,我到這一點,這是行不通的:

public sealed partial class TemplatePage : LayoutAwarePage 
{ 
    public TemplatePage() 
     : base() 
    { 
     this.DefaultViewModel = new ObservableDictionary<string, object>(); 
     this.DefaultViewModel.Add("Name", "Design-time value."); 

     this.InitializeComponent(); 
    } 

...} 

無論VS2012和Blend沒有看到的DataContext的。當我單擊爲TextBlock創建數據綁定時,混合報告

未設置數據上下文。當您選擇自定義時,您可以輸入一個路徑。

這在運行時工作,我的複雜智能屁股的東西也適用,但不是在設計師。有沒有辦法,這一切工作現在改變了?我錯過了備忘錄嗎?

更新

因此,使用指導,從教程Channel9的

http://channel9.msdn.com/Series/Windows-Store-apps-for-Absolute-Beginners-with-C-/Part-8-Understanding-how-Data-Binding-Works-at-Design-Time

我至少現在可以包括更多的代碼無法正常工作。

我已經創建了幾個擴展BindableBase類的虛擬數據源,很像本教程如何具有此設置,但事情的XAML方面很奇怪。

Shot of page XAML and inaccurate Binding dialog

的XAML表示,在頁面元素水平,構建DesignTimeDataHub對象,並以此作爲在DataContext。然後,在根網格級別,使用將DataContext重置爲CommonFakeData屬性。

網格下的TextBlock的混合創建數據綁定對話框似乎認爲DataContext是在頁面級設置的!

我是否使用{Binding CommonFakeData.Title}{Binding Title}它不起作用。

我明顯地把這一切搞砸了。我很高興他們更加努力,因爲編寫代碼一直很容易。

+0

可以放大瀏覽器中看到的形象。 –

回答

9

好的,我已經破解了它。設置DataContext的格式應該是:

d:DataContext="{Binding PropertyNameOfSubViewModel, Source={d:DesignInstance Type=myNamespace:ViewModelTypeName, IsDesignTimeCreatable=True}}" 

我現在離開頁面級DC作爲DefaultViewModel。然後使用上述正確的DC設計時語法向佈局根網格元素添加另一個DC屬性。

然後,TextBlock只需要在其綁定中的SubViewModel上的屬性名稱。所以假數據視圖模型roughyl這樣的:

public class DesignTimeDataHub : BindableBase // Probably doesn't need to be BindableBase. 
{ 
    public CommonBindableFakeData CommonFakeData { // get set } 
} 

public class CommonBindableFakeData : BindableBase 
{ 
    ctor { // set some default fake values } 

    public string Title { // get set } 
} 

這裏是什麼樣子:

Working XAML for design time binding

+0

THANKYOU!對於其他人,這是如何使用一個簡單的對象.. d:DataContext =「{Binding Source = {d:DesignInstance Type = objects:Item,IsDesignTimeCreatable = True}}」 – rikkit