2

クリックしたセルに応じて、異なるRadContextMenuが表示されたRadGridViewがあります。

ObservableコレクションとしてRadMenuItemsのリストがあります。グリッドが配置されているStackPanel(親コンテナー)に次のコードを設定すると、すべてのアイテムが正しく表示されます。

itemtemplateのスタックパネルに移動すると、機能しません。ViewModelを見つけるための同じコードは、前の項目のボタンコマンドで機能しますが、コンテキストメニューでは機能しません。

ビューの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>
4

1 に答える 1

4

返信がないので、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}}" />
于 2012-05-15T13:01:28.300 に答える