上下文菜单DataBinding不适用于ListView绑定

时间:2019-07-10 09:25:40

标签: c# wpf listview contextmenu templatebinding

在我的WPF窗口中,有一个带有上下文菜单的Button。 我将上下文菜单模板定义为静态资源。在上下文菜单ControlTemplate中,有一个ListView。我已经通过DataBinding绑定了这个ListView ItemTemplate。

现在,我需要在Button鼠标悬停时显示此上下文菜单。 当我右键单击按钮时,上下文菜单也显示,我的绑定也正在工作,能够更新ListView控件中的项目。

但是当我尝试在Button PreviewMouseMove事件上显示ContextMenu时,绑定不起作用。

用于打开上下文菜单的代码:

btn_1.ContextMenu.IsOpen = true;

我的Listview控件为空。

请建议如何在PreviewMouseMove事件上填充ListView项。

在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; }
        }

0 个答案:

没有答案