【问题标题】:WPF DatGrid Context Menu BindingWPF DataGrid 上下文菜单绑定
【发布时间】:2014-07-20 07:18:21
【问题描述】:

我有一个 WPF DataGrid,其 DataContext 绑定到一个可观察的视图模型集合。

我的 DataGrid 列每个都绑定到集合中对象的不同属性,这可以正常工作,在网格上显示集合中的对象。

我想在这个网格上添加一个上下文菜单,菜单项定义为视图模型上的另一个属性,构成了整个可观察集合。这些菜单项是菜单项的另一个 Observable 集合。我知道这种方法可以工作,因为我在应用程序的另一部分的树视图上有类似的代码。

我已经定义了DataGrid和ContextMenu的绑定如下:

 <DataGrid Name="SynchErrors" Grid.Row="1"
              Style="{StaticResource SortableGrid}"
              ItemsSource="{Binding}">
        <DataGrid.Resources>
            <userControls:BindingProxy x:Key="BindingProxy" DataContextProxy="{Binding}"  />

        </DataGrid.Resources>
        <DataGrid.ContextMenu>
             <ContextMenu DataContext="{Binding Path=DataContextProxy, Mode=TwoWay, Source={StaticResource BindingProxy}}"
            ItemsSource="{Binding Path=DataContextProxy.ContextMenuCommandList, Mode=TwoWay, Source={StaticResource BindingProxy}}">
                <ContextMenu.Resources>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
                        <Setter Property="Header" Value="{Binding DisplayName}"></Setter>
                    </Style>
                </ContextMenu.Resources>
            </ContextMenu>
        </DataGrid.ContextMenu>

        <DataGrid.Columns>
            <DataGridTextColumn Header="From"
                                MinWidth="120"
                                Width="*"
                                Binding="{Binding Path=Owner}"/>

            <DataGridTextColumn Header="Subject"
                                Width="2*"
                                Binding="{Binding Path=Name}"
                                SortMemberPath="Name"/>
       <DataGrid.Columns>

当我运行我的应用程序时,我的项目在网格中正确列出,但是当我右键单击时,我得到一个空的上下文菜单和以下绑定错误:

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ObservableCollection`1”(HashCode=53690177)上找不到“ContextMenuCommandList”属性。 BindingExpression:路径=DataContextProxy.ContextMenuCommandList; DataItem='BindingProxy' (HashCode=43857660);目标元素是'ContextMenu'(名称='');目标属性是“ItemsSource”(类型“IEnumerable”)

我已使用 BindingProxy 将 DataContext 从 DataGrid 传递到 ContextMenu,因为上下文菜单位于可视树之外,但这似乎是传递整个集合而不是绑定到每一行的单个项目。

是否可以在 DataGrid 上定义上下文菜单的绑定以引用父集合的每个单独项?

【问题讨论】:

    标签: c# wpf xaml mvvm wpfdatagrid


    【解决方案1】:

    你能试着改变一下吗 ItemsSource="{绑定路径=DataContextProxy.ContextMenuCommandList 对此 ItemsSource="{绑定路径=DataContextProxy/ContextMenuCommandList

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 2011-12-08
      相关资源
      最近更新 更多