В моем приложении WPF я добавил данные TreeView для привязки элемента управления TreeViewItems. Я добавил контекстное меню в treeviewitems. Обработчик контекстаMenu не стреляет. Вот код XAML для TreeView.Триггер контекстного меню не запускается в 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 не заполняется привязанными данными.
Пожалуйста, помогите. Thanks
Когда я использую TreeViewItem вместо TreeView.ItemTemplate, запускается одна и та же команда. Поэтому я не думаю, что проблема связана с Command или DataContext. Когда я это делаю и нажмите F2, , –
WAQ
Это не зависит от шаблона treeviewitem /. Разница между командами и событиями заключается в том, что с событием в WPF (или другом) вы определяете метод, который выполняется. С привязкой Command у вас есть свойство. И это свойство содержит действие, которое должно быть выполнено. Но здесь этот код отсутствует. – Tintenfiisch
вот мой обработчик команд private ICommand _RenameCommand; общественного ICommand RenameCommand { получить { если (_RenameCommand == NULL) { _RenameCommand = новый RelayCommand1 ((о) => {MessageBox.Show ("Переименовать меня");}); } return _RenameCommand; } } – WAQ