2014-09-21 35 views
0

我創建了一個名爲EventMenu的小型UserControl。我參考它在一個更大的觀點使用:無法聲明性地設置自定義UserControl的DataContext

<views:EventMenu 
    Grid.Row="1" 
    DataContext="{Binding DataContext.ServicingEventsMenuViewModel}" 
    /> 

(我也試過DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel}")。

但是,沒有從綁定的數據上下文的內容顯示在控制(從控制的XAML文件確實出現靜態內容)。我相信控件不綁定DataContext。

在後面的構造爲用戶控件的代碼,我已經做到了這一點:

public EventMenu() 
    { 
     InitializeComponent(); 
     if (DataContext == null) 
     { 
      Console.WriteLine("No data context!"); 
     } 
    } 

,它確實表明,在DataContext爲空。

什麼我需要做的,以確保DataContext設置在我的用戶?

+1

是否較大視圖的DataContext的有屬性'ServicingEventsMenuViewModel'? – 2014-09-21 19:24:08

+1

@LarryLustig如果它包含'ServicingEventsMenuViewModel'屬性,那麼很可能你不需要綁定路徑中的'DataContext'部分。基本上,在你的情況下,它會嘗試找到這樣'DataContext.DataContext.ServicingEventsMenuViewModel'屬性,因爲它會嘗試採取從當前'DataContext'屬性值 – dkozl 2014-09-21 19:47:41

+0

也對與綁定任何故障給定的路徑,你可以查看輸出窗口看看那裏是否有任何錯誤報告。 – 2014-09-21 19:56:51

回答

0

第一錯誤的事情我看是這樣的:

DataContext="{Binding DataContext.ServicingEventsMenuViewModel}" 

的DataContext是FrameworkElement的的依賴項屬性。

所以寫東西喜歡寫you'v時,你寫它,就好像你的DataContext有一個名爲DataContext屬性,它是寫這相當於:

DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel}" 

你們是不是要達到一個父元素的DataContext的? 如果是這樣你需要(如果它的父是一個用戶控件爲例)寫的是這樣的:

DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel,RelativeSource={RelativeSource AncestorType={x:Type UserControl}" 

我猜這是這裏的情況...

讓我問你這個,後其中的xaml

<views:EventMenu /> 

是嵌套的,並且該類擁有ServicingEventsMenuViewModel屬性。

我認爲第二件事情是錯的是檢查,如果你的DataContext的是在構造空,即使你沒有寫正確的綁定聲明此屬性仍然是在構造函數中無效。

訂閱FrameworkElement的的Loaded事件,並檢查它。

+0

謝謝。我首先用'Path'構造嘗試了相同的結果。我想要設置爲嵌套UserControl的DataContext的視圖模型是外部視圖的DataContext的屬性 - 我不需要追溯到額外的級別。我的控件嵌套在一個非常大的XAML文件中(這是給我的,我試圖將其重構成更小的塊)。我將在明天工作時嘗試創建一個最小例子。 – 2014-09-22 00:09:12

+0

您需要使用relativesource,並且您不需要路徑中的DataContext – 2014-09-22 05:36:32

相關問題