В моем окне WPF есть кнопка с контекстным меню.
Я определяю шаблон контекстного меню как статический ресурс. В контекстном меню ControlTemplate есть ListView. Я связал этот ListView ItemTemplate через DataBinding.
Теперь мне нужно показать это контекстное меню при наведении курсора мыши.
Когда я щелкаю правой кнопкой мыши по кнопке, появляется контекстное меню и работает моя привязка, которая может обновлять элементы в элементе управления ListView.
Но когда я пытаюсь показать ContextMenu в событии Button PreviewMouseMove, привязка не работает.
Код, используемый для открытия контекстного меню:
btn_1.ContextMenu.IsOpen = true;
Мой элемент управления Listview пуст.
Пожалуйста, предложите, что нужно сделать для заполнения элементов ListView в событии PreviewMouseMove.
В окне WPF
public mainWindow()
{
MyViewModel oModel = new MyViewModel();
InitializeComponent();
this.DataContext = oModel.prd1;
}
в XAML
Кнопка управления
<Button Name="brd_Product1" Content={Binding ProductName} PreviewMouseMove="brd_PreviewMouseMove">
<Button.ContextMenu>
<ContextMenu Template="{StaticResource tmpl_Offer}"
ContextMenuService.VerticalOffset="-25" ContextMenuService.HorizontalOffset="50">
</ContextMenu>
</Button.ContextMenu>
</Button>
и в классе MyViewModel
public cOffer prd1{ get; set; }
public MyViewModel()
{
cOffer prd1 = new cOffer()
{
ProductName = "Product1",
listFeatures = new List<string> {
"Features1",
"Features2",
"Features3"},
};
}
Шаблон управления определяют
<ControlTemplate x:Key="tmpl_Offer"
TargetType="{x:Type ContextMenu}">
<Border CornerRadius="5" Background="#3A3A3A">
<ListView Name="lview_FeatureList"
ItemsSource="{Binding listFeatures}"ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" IsHitTestVisible="False">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Text="{Binding}"
TextTrimming="CharacterEllipsis"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
</ControlTemplate>
public class cOffer
{
public string ProductName { get; set; }
public List<string> listFeatures { get; set; }
}