2015-04-02 71 views
1

爲什麼我不能在DataGrid內的MenuItem中的兩個元素之間進行綁定?在同一個WPF中聲明的兩個控件之間的綁定ContextMenu MenuItem

這不是多個MenuItem之間的綁定,它與相同MenuItem的標題模板中存在的項目內的綁定有關。

DataGrid之外託管相同的控件時,此工作正常。但在MenuItem中,我遇到綁定錯誤「無法找到與引用綁定的源...」。當然,他們在同一個視覺樹中,可以互相引用?

請注意,這不是ElementName Binding from MenuItem in ContextMenu的重複,因爲綁定方案略有不同,並且沒有答案可解決此問題。

<DataGrid.ContextMenu> 
    <ContextMenu> 
     <MenuItem > 
      <MenuItem.Header> 
       <StackPanel Orientation="Horizontal"> 
        <ComboBox Margin="5 0" Name="comboBox"> 
         <ComboBoxItem>1</ComboBoxItem> 
         <ComboBoxItem>2</ComboBoxItem> 
         <ComboBoxItem>3</ComboBoxItem> 
        </ComboBox> 
        <TextBlock Margin="5 0" Text="{Binding ElementName=comboBox, Path=SelectedValue}"></TextBlock> 
       </StackPanel> 
      </MenuItem.Header> 
     </MenuItem> 
    </ContextMenu> 
</DataGrid.ContextMenu> 
+0

您是否嘗試過設置上下文菜單的datacontext,如引用問題中所述? – CalebB 2015-04-02 14:48:39

+0

@CalebB這樣做會導致您需要引用選定行的DataContext的任何其他綁定無效。 – Slugart 2015-04-02 15:01:22

回答

2

您可以使用x:Reference來實現它。請參閱以下代碼。

<DataGrid.ContextMenu> 
      <ContextMenu> 
       <MenuItem > 
        <MenuItem.Header> 
         <StackPanel Orientation="Horizontal"> 
          <ComboBox Margin="5 0" x:Name="comboBox"> 
           <ComboBoxItem>1</ComboBoxItem> 
           <ComboBoxItem>2</ComboBoxItem> 
           <ComboBoxItem>3</ComboBoxItem> 
          </ComboBox> 
          <TextBlock Margin="5 0" 
             Text="{Binding Source={x:Reference comboBox}, 
             Path=Text}"> 
          </TextBlock> 
         </StackPanel> 
        </MenuItem.Header> 
       </MenuItem> 
      </ContextMenu> 
     </DataGrid.ContextMenu> 
+1

至於爲什麼要引用x:參考「在WPF和XAML 2006中,元素引用通過ElementName綁定的框架級功能來解決。對於大多數WPF應用程序和場景,仍應使用ElementName綁定。可能包括有數據上下文或其他範圍考慮因素使得數據綁定不切實際以及不涉及標記編譯的情況。「 – OmegaMan 2015-04-02 18:50:54

相關問題