2011-02-28 57 views
2

我有以下XAML的父(簡化,沒有結束標記):定製控件的內容不能綁定到控制

<Window Name="myWindow" DataContext="{Binding ElementName=myWindow}" > 
    <DockPanel> 
     <tb:ToolBar Name="toolbar" DockPanel.Dock="Top"> 
      <tb:ToolBar.Items> 
       <tb:ToolBarControl Priority="-3"> 
        <tb:ToolBarControl.Content> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock>Maps:</TextBlock> 
          <ComboBox ItemsSource="{Binding Generator.Maps, ElementName=myWindow}"> 

ComboBox的結合將失敗,並

Cannot find source for binding with reference 'ElementName=myWindow'

有關自定義控件的一些事實:

  • tb:ToolBarUserControl WH ich包含實際ToolBarItemsSource綁定到Items財產的tb:ToolBar(繼承類型IList)。

  • ToolBar所述的ToolBarItemDataTemplate是從幾個DataTemplate秒(根據項的類型)選擇的。

  • 屬於tb:ToolBarControl的DataTemplate中是非常簡單 - 它只是包含ContentPresenter綁定到tb:ToolBarControl財產Content

  • tb:ToolBarControl不是技術原因UserControl,它只是DependencyObjectobject型物業Content

爲什麼不能ComboBox引用Window

感謝您的幫助!

+0

你確定失敗來自ComboBox嗎? 說窗口不是myWindow,但在錯誤消息中它說'元素名= myWindow' – 2011-11-23 13:56:11

+0

@Xim這是因爲我已經改變了原來的名字。綁定錯誤指定了它的起源。原始的完整錯誤是「System.Windows.Data錯誤:4:找不到與參考綁定的源'ElementName = view2D'。BindingExpression:Path = Generator.Maps; DataItem = null;目標元素是'ComboBox'(Name =' ');目標屬性是'ItemsSource'(類型'IEnumerable')「。是的,「view2D」是窗口的名稱。 – 2011-11-23 15:12:51

回答

3

我這裏有一個類似的問題:

Bindings on child dependency object of usercontrol not working

的DependencyObject沒有一個DataContext,我想這就是爲什麼綁定不起作用。嘗試繼承自FrameworkElement,而不是繼承自「DependencyObject」。

+0

我明白了,但我不能僅僅將基類型更改爲UIElement,因爲ItemTemplate和ItemTemplateSelector已經被ItemsControl的容器類型的項目忽略;類型='ToolBarControl''。看起來像我將不得不重寫數據模板來控制模板:( – 2011-02-28 15:44:16

+0

根據您的建議我改進了我的代碼,但它仍然不起作用。我發佈了第二個問題:http://stackoverflow.com/questions/7546116 /結合,從項 - 的 - 的 - 的ItemsControl-與定製收集 – 2011-09-25 14:25:26