我有一个显示不同RadContextMenu的RadGridView,具体取决于单击的单元格。
我有一个RadMenuItems列表作为Observable集合。当我在StackPanel上设置以下代码(Grid容器)时,它会正确显示所有项目。
当我将它移动到itemtemplate中的stackpanel时,它将无法工作。查找ViewModel的相同代码与前一项中的button命令一起使用,但不在上下文菜单中。
我已附加到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>
答案 0 :(得分:4)
在没有得到任何回复后,我联系了Telerik支持,他们解决了这个问题。他们表示在绑定中使用FindAncestor时存在一些问题,这也是常规上下文菜单中的问题。他们的解决方案是为ViewModel使用静态资源,然后将其指定为静态资源。
我使用MVVM灯中的ViewModelLocator,所以我的View绑定如下: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}}" />