【问题标题】:wpf RadGridView / RadContextMenu binding issuewpf RadGridView / RadContextMenu 绑定问题
【发布时间】:2012-05-22 05:16:50
【问题描述】:

我有一个显示不同 RadContextMenu 的 RadGridView,具体取决于单击的单元格。

我有一个 RadMenuItems 列表作为 Observable 集合。当我在 Grid 位于(父容器)中的 StackPanel 上设置以下代码时,它会正确显示所有项目。

当我将它移到项目模板中的堆栈面板中时,它将无法工作。查找 ViewModel 的相同代码适用于前一项中的按钮命令,但不适用于上下文菜单。

我已附加到 View 中的 Opening 事件,并且 ItemsSource 为 null....

有什么想法吗?

此按钮命令正常工作:

                   <telerik:GridViewColumn Header="View" Width="75">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="View" FontSize="16" Margin="2" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ViewTrips:ViewTripsView}}, Path=DataContext.ViewTripCommand}" CommandParameter="{Binding Path=TripID}"></Button>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>

上下文菜单不会被填充:

                <telerik:GridViewColumn Name="TripStatus" Header="Status" Width="75" SortMemberPath="TripStatus.Name">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>                                   
                                <telerik:RadContextMenu.ContextMenu>
                                    <telerik:RadContextMenu ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ViewTrips:ViewTripsView}}, Path=DataContext.StatusItems}">

                                    </telerik:RadContextMenu>

                                </telerik:RadContextMenu.ContextMenu>
                                <TextBlock TextWrapping="Wrap" Text="{Binding Path=TripStatus.Name}"></TextBlock>
                                <TextBlock TextWrapping="Wrap" Text="{Binding Path=SalesOrder.PaymentStatusText}"></TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>

StatusItems 声明

    private ObservableCollection<RadMenuItem> _StatusItems;

    public ObservableCollection<RadMenuItem> StatusItems
    {
        get
        {
            return _StatusItems;
        }
        set
        {
            _StatusItems = value;
            RaisePropertyChanged("StatusItems");
        }
    }

以下代码在网格项单元格之外有效:

<StackPanel>                                   
  <telerik:RadContextMenu.ContextMenu>
    <telerik:RadContextMenu ItemsSource="{Binding  Path=StatusItems}">                                           
    </telerik:RadContextMenu>                                        
  </telerik:RadContextMenu.ContextMenu>
  ... code for RadGridview....
</StackPanel>

【问题讨论】:

    标签: wpf data-binding mvvm telerik radgridview


    【解决方案1】:

    在没有收到任何回复后,我联系了 Telerik 支持,他们解决了这个问题。他们表示在绑定中使用 FindAncestor 时存在一些问题,这也是常规上下文菜单中的问题。他们的解决方案是为 ViewModel 使用静态资源,然后将其分配为静态资源。

    我使用来自 MVVM 灯的 ViewModelLocator,所以我的视图绑定如下:DataContext="{Binding Path=ViewTripsViewModelBinding, Source={StaticResource Locator}}"

    我将 CollectionViewSource 添加到资源中,并将其绑定到我的状态项。然后我将上下文菜单绑定到静态资源。

      <Common:WindowBase.Resources>
            <CollectionViewSource x:Key="StatusItems" Source="{Binding Path=StatusItems}"></CollectionViewSource>
        </Common:WindowBase.Resources>
    

    还有我的上下文菜单:

    <telerik:RadContextMenu ItemsSource="{Binding Source={StaticResource StatusItems}}" />
    

    【讨论】:

    • 你能提供telerik中特定问题的链接吗?
    • 这是一个支持案例,而不是论坛中的问题。如果我有链接,我会发布一个链接。
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多