2011-06-11 121 views
2

我創建了一個WPF應用程序,並遵循MVVM模式。我在我的xaml中有一個上下文菜單,我需要綁定命令和標題文本。使用下面的代碼,我可以將上下文菜單的Header綁定到作爲可觀察集合的BOList屬性中的「MenuItemName」。我的問題是,命令沒有被解僱?我將上下文菜單的Item源更改爲datacontextWPF +使用MVVM的上下文菜單項的綁定命令和標題

(DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}") 

命令正常,但我的標題變得空白。有沒有辦法綁定我的標題和命令的菜單項?這裏命令MenuClick是VM中的一個Icommand屬性,而MenuItemName是BOList中的一個屬性,它是綁定到我的ListBox的可觀察集合。

<Grid> 
<StackPanel Orientation="Vertical"> 
    <Button x:Name="btnClickMe" Command="{Binding ButtonCommand}" Content="Click Me" /> 
    <ListBox ItemsSource="{Binding BOList}" x:Name="lstDemo" SelectedItem="{Binding BussinessObj,Mode=OneWayToSource}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel x:Name="stkStyleRender" Orientation="Horizontal" Background="Cyan" Width="525" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" > 
      <TextBlock x:Name="txtId" Text="{Binding FirstName}"></TextBlock> 
      <TextBlock x:Name="txtName" Text="{Binding LastName}"></TextBlock> 
      <StackPanel.ContextMenu> 
      <ContextMenu x:Name="cntMnuTest" ItemsSource ="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" > 
       <MenuItem Header="{Binding MenuItemName}" Command="{Binding MenuClick}" CommandParameter="Icon"></MenuItem> 
      </ContextMenu> 
      </StackPanel.ContextMenu> 

     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
</StackPanel> 

+0

什麼是MenuItemName看起來像視圖模型?在控制檯輸出中查找Beinding表達式錯誤,併發布它是什麼,如果你看到它。 – Berryl 2011-06-11 23:12:23

回答

0

在上下文菜單中使用的DataContext,而不是使用項目源
然後綁定你的菜單項

+0

我試過了,如果datacontext設置命令的作品,但頭屬性綁定失敗,,如果項目源設置標題綁定工作,但命令綁定失敗,,, – user793886 2011-06-11 14:08:52

+1

嗨確定問題。如果我們將上下文菜單的Item Source設置爲BOList(observable collection),那麼命令將不會被觸發,因爲icommand定義在Window data ciontext(vm)中。我們需要像智者一樣處理代碼。由於調試是不可能的綁定,我在圍繞布什:-)。這個鏈接幫了我很多http://www.wpftutorial.net/DebugDataBinding.html – user793886 2011-06-12 07:39:34

0

試試這個:

<MenuItem Header="{Binding Path=PlacementTarget.MenuItemName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}" Command="{Binding Path=PlacementTarget.MenuClick, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}" /> 
+0

沒有它不適合我... – user793886 2011-06-11 16:53:53

+0

如果你設置DataContext然後命令bindinng發生,如果我們設置項目源頭標綁定發生.. user793886 2011-06-11 17:00:00

+0

你能解釋一下嗎? – 2011-06-11 17:46:43

1

喜標識的問題。

如果我們將上下文菜單的Item Source設置爲BOList(observable collection),那麼命令將不會被觸發,因爲ICommand定義在Window數據上下文(vm)中。

我們需要像明智一樣處理代碼。

由於調試是不可能的結合,我拐彎抹角:-)

此鏈接擊敗幫了我很多WPF Tutorial - Debug Databinding Issues in WPF