2013-07-07 108 views
0

在我的WPF應用程序中,我向TreeViewItems添加了一個TreeView控件綁定類數據。我已經向treeviewitems添加了一個上下文菜單。 contextMenu的處理程序沒有開火。這裏是TreeView的XAML代碼。上下文菜單觸發器沒有在TreeViewItem上觸發

<TreeView ItemsSource="{Binding pads}" Width="190"> 
        <TreeView.ItemContainerStyle> 
         <Style TargetType="{x:Type TreeViewItem}"> 
          <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
          <Setter Property="FontWeight" Value="Normal" /> 
          <Setter Property="ContextMenu"> 
           <Setter.Value> 
            <ContextMenu> 
             <MenuItem Header="Rename" Command="{Binding RenameCommand}"/> 
            </ContextMenu> 
           </Setter.Value> 
          </Setter> 
          <Style.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="FontWeight" Value="Bold" /> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </TreeView.ItemContainerStyle> 

        <TreeView.ItemTemplate> 
         <HierarchicalDataTemplate ItemsSource="{Binding Members}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Name}" /> 
           <TextBlock Text=" [" Foreground="Blue" /> 
           <TextBlock Text="{Binding Members.Count}" Foreground="Blue" /> 
           <TextBlock Text="]" Foreground="Blue" /> 
          </StackPanel> 
          <HierarchicalDataTemplate.ItemTemplate> 
           <DataTemplate DataType="{x:Type vm:PadInfo}"> 
            <StackPanel Orientation="Horizontal"> 
             <TextBlock Text="["></TextBlock> 
             <TextBlock Text="{Binding SlotID}" /> 
             <TextBlock Text="] ["></TextBlock> 
             <TextBlock Text="{Binding WellID}" /> 
             <TextBlock Text="]"></TextBlock> 
            </StackPanel> 
           </DataTemplate> 
          </HierarchicalDataTemplate.ItemTemplate> 
         </HierarchicalDataTemplate> 
        </TreeView.ItemTemplate> 

       </TreeView> 

這些是綁定到TreeView的兩個類。

/// <summary> 
/// Class to hold the Pads info for a tree 
/// </summary> 
public class Pad 
{ 
    /// <summary> 
    /// Default Constructor 
    /// </summary> 
    public Pad() 
    { 
     this.Members = new ObservableCollection<PadInfo>(); 
    } 

    /// <summary> 
    /// Name of the pad 
    /// </summary> 
    public string Name { get; set; } 

    /// <summary> 
    /// Members of the pad 
    /// </summary> 
    public ObservableCollection<PadInfo> Members { get; set; } 
} 

/// <summary> 
/// Class to hold the well and slot IDs snapped to a pad 
/// </summary> 
public class PadInfo 
{ 
    /// <summary> 
    /// Slot ID 
    /// </summary> 
    public string SlotID { get; set; } 

    /// <summary> 
    /// Well ID 
    /// </summary> 
    public string WellID { get; set; } 
} 

}

該成員綁定到TreeView

public List<Pad> pads { get; set; } 

當我右鍵點擊菜單項,在RenameCommand事件不會開火。 當我更改爲處理程序被解僱但TreeView沒有填充綁定數據。

請幫忙。 謝謝

回答

0

基本上我在這裏丟失重要代碼關於你的類與列表在哪裏,你綁定的命令在哪裏? 此外,您正在使用CommandBinding。這不像普通的事件處理程序。這是WPF中的兩件事情。我認爲你在你的DataContext類中缺少你的命令的屬性。

+0

當我使用TreeViewItem代替TreeView.ItemTemplate時,同樣的命令被觸發。所以我不認爲問題是用Command或DataContext。 當我爲此 <鍵綁定密鑰= 「F2」 命令= 「{結合的RelativeSource = {的RelativeSource AncestorType = {X:類型樹視圖}},路徑= DataContext.RenameCommand}」/> 並按F2相同的命令火災。 – WAQ

+0

它不依賴於treeviewitem/template。命令和事件之間的區別在於,在WPF(或其他)中的事件中,您正在定義執行的方法。使用Command綁定你有一個屬性。而這個屬性包含了應該執行的動作。但是這裏沒有這個代碼。 – Tintenfiisch

+0

這裏是我的命令處理程序 private ICommand _RenameCommand; 公衆的ICommand RenameCommand { 得到 { 如果(_RenameCommand == NULL){ _RenameCommand =新RelayCommand1((0)=> {MessageBox.Show( 「重命名我」);}); } return _RenameCommand; } } – WAQ

相關問題