【问题标题】:WPF Caliburn.Micro ItemsControl ContextMenu don't find methodWPF Caliburn.Micro ItemsControl ContextMenu 找不到方法
【发布时间】:2014-09-01 19:10:46
【问题描述】:

我在使用 Caliburn.Micro 的 ContextMenu 时确实遇到了一些问题。无论我做什么,我都会收到错误“Cant' find the method ...”。

我也试过this solutionsthat one,但我无法让它工作。

我做错了什么?实际上,有一种方法可以调试视图并找出控件在哪个 Context 中搜索相应的 ViewModel?

还有一件事……这个视图位于另一个视图的 DataTemplate 中,这会改变什么吗?所有其他绑定都在正确的 ViewModel 中工作...

<ScrollViewer VerticalScrollBarVisibility="Auto"  
                  HorizontalScrollBarVisibility="Disabled" 
                  Grid.Row="1" Grid.Column="0" 
                  Padding="10,5,15,5"
                  MaxHeight="390" x:Name="xImages">
        <ItemsControl 
            ItemsSource="{Binding Path=Document.Images}"                
            dd:DragDrop.IsDragSource="True"
            dd:DragDrop.IsDropTarget="True">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Height="110">
                        <Border Margin="5" BorderBrush="Gainsboro" BorderThickness="1">
                            <Image Source="{Binding Path=PathThumb}" Width="70" Height="100"> <!-- Tag="{Binding DataContext, ElementName=xImagens}" -->
                                <Image.ContextMenu>
                                    <ContextMenu 
                                        cal:Action.TargetWithoutContext="{Binding DataContext, ElementName=xImagens}"> <!--PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"-->
                                        <MenuItem Header="Ampliar"
                                                cal:Message.Attach="[Event Click] = [Action ExpandImage($datacontext)]"></MenuItem>
                                        <MenuItem Header="Excluir" 
                                                cal:Message.Attach="[Event Click] = [Action DeleteImage($datacontext)]"></MenuItem>
                                    </ContextMenu>
                                </Image.ContextMenu>
                            </Image>
                        </Border>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </ScrollViewer>

【问题讨论】:

    标签: c# wpf contextmenu caliburn.micro


    【解决方案1】:
     cal:Action.TargetWithoutContext="{Binding Source={x:Reference xImagens} , Path=DataContext}">
    

    因为 ContextMenu 不是 VisualTree 的一部分,所以不能绑定到可视树中的元素 它的 TargetPlacement。 (虽然在 XAML 中它似乎是其中的一部分)。

    你有两个选择:

       {Binding Path=PlacementTarget.DataContext}
    

    或者:

       {Binding Source={x:Reference xImagens}, Path=DataContext}
    

    【讨论】:

    • 使用 {x:Reference xImagens, Path=DataContext} 它不会重新调整降价...其他解决方案也不起作用...
    • @DiegoSilvaPires 您可以删除引号末尾的额外右大括号,标记应该是好的。这种方法对我有用。
    【解决方案2】:

    x:Name="xImages" 提供给ItemsControl,然后使用Action.TargetWithoutContext 将ElementName 绑定到ContextMenu,你做对了,但ScrollViewer 并不是数据列表中的Datacontext, ItemControl 之所以这样做,是因为它具有 ItemSource。

    命名 ScrollViewer 有什么原因吗?

    <ItemsControl x:Name="xImages">
    
    <ContextMenu Action.TargetWithoutContext="{Binding Path=DataContext, ElementName=xImages}">
    <!-- Shortened -->
    </ContextMenu>
    
    </ItemsControl>
    

    【讨论】:

    • 我尝试将名称放在 ItemsControls 中,但没有奏效,所以我想象可能在 itemscontrols 中使用的上下文来自我的列表,但我想要来自 VM 的上下文...它也没有那样工作...
    • 试试这个... cal:Binding.Model="{Binding}" 连同上面的标记,这将有助于在其构造中看到更多的视图...如果可以
    • 我应该把它放在哪里?在 ItemsControls 和 ContextMenu 中尝试过,但都不起作用
    • 相对于 DataTemplates 的深度,控件在数据模板中的位置是什么?如果您想要这个特定控件绑定到的视图模型,实际获取生成它的视图模型可能会在 ScrollViewer 上运行,但没有看到您是如何组成视图的,我无法确定它是否会起作用。基本上,在 CM 使用约定正确绑定的能力方面,您遇到了 VisualTree 和 DataTemplates 的限制。
    • 我有一个带有多个视图的 MetroWindow 作为 DataTemplates,在 ContentControl 内呈现...每个视图都是一个 UserControl,我只有这个 ScrollViewer 和一些 Grid 内的按钮...我可能打破了一些惯例规则,但不知道在哪里......没有任何方法可以发现绑定在哪个上下文中寻找方法?够奇怪的是,ItemsControls 外的按钮都能正常工作,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2013-07-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多