Контекстное меню DataBinding не работает для привязки ListView - PullRequest
1 голос
/ 10 июля 2019

В моем окне 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; }
        }
...