2012-08-27 22 views
1

我有一個問題顯示上下文菜單RadContextMenu與圖標,我正在使用動態綁定到可觀察集合,其中包含上下文菜單項(文本和圖標),我正在按照本教程「Dynamic Binding 「,以下是我的XAMLRadContextMenu圖標不可見與動態綁定

<!-- Context Menu Resources Start--> 
    <Style x:Key="MenuItemStyle" TargetType="{x:Type telerik:RadMenuItem}"> 
      <Setter Property="Icon"> 
       <Setter.Value> 
        <Image Source="{Binding IconPath, Converter={StaticResource pathtoimage}}" /> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <HierarchicalDataTemplate x:Key="MenuItemTemplate"> 
      <telerik:RadButton Content="{Binding Title}" HorizontalContentAlignment="Left" Background="Transparent" BorderBrush="Transparent" /> 
     </HierarchicalDataTemplate> 

<!-- Context Menu Resources End --> 

以下是放置上下文菜單的RadGridView的XAML。

<telerik:RadGridView x:Name="myGridView" AutoGenerateColumns="False" ItemsSource="{Binding GridData}" VerticalAlignment="Top"> 
     <telerik:RadGridView.Columns> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding Result}" Header="Result"/> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding Category}" Header="Category"/> 
     </telerik:RadGridView.Columns> 
     <telerik:RadContextMenu.ContextMenu> 
      <telerik:RadContextMenu ItemsSource="{Binding ContextMenuItems}" ItemContainerStyle="{StaticResource MenuItemStyle}" ItemTemplate="{StaticResource MenuItemTemplate}">     
      </telerik:RadContextMenu> 

查看模型如下

class MainViewModel 
{ 
    private ObservableCollection<MenuItemObj> menuitems_; 
    public ObservableCollection<MenuItemObj> ContextMenuItems 
    { 
     get 
     { 
      return menuitems_; 
     } 
     set 
     { 
      menuitems_ = value; 
     } 
    } 

    private ObservableCollection<GridRowDataObj> griddata_; 
    public ObservableCollection<GridRowDataObj> GridData 
    { 
     get 
     { 
      return griddata_; 
     } 
     set 
     { 
      griddata_ = value; 
     } 
    } 
} 

public class MenuItemObj 
{ 
    public string Title { get; set; } 
    public string IconPath { get; set; } 
} 

public class GridRowDataObj 
{ 
    public string Result { set; get; } 
    public string Category { set; get; } 
} 

和設置的DataContext作爲

//TODO 
     ObservableCollection<GridRowDataObj> gd = new ObservableCollection<GridRowDataObj>(); 
     gd.Add(new GridRowDataObj() { Result = "Primary School", Category = "SSC" }); 
     gd.Add(new GridRowDataObj() { Result = "Higher School", Category = "HSSC" }); 
     gd.Add(new GridRowDataObj() { Result = "Higher School", Category = "HSSC" }); 

     //TODO 
     ObservableCollection<MenuItemObj> mi = new ObservableCollection<MenuItemObj>(); 
     mi.Add(new MenuItemObj() { Title = "My Item 1", IconPath = "/Images/item1.png" }); 
     mi.Add(new MenuItemObj() { Title = "My Item 2", IconPath = "/Images/item2.png" }); 
     mi.Add(new MenuItemObj() { Title = "My Item 3", IconPath = "/Images/item3.png" }); 

     MainViewModel mvm = new MainViewModel(); 
     mvm.ContextMenuItems = mi; 
     mvm.GridData = gd; 

     this.DataContext = mvm; 

但是當我運行的代碼,這是我得到

Output of code

我不確定爲什麼第一個和第二個菜單項的圖標沒有顯示,我已經檢查過這個圖標只顯示最後一個菜單項。我有完整的項目複製這種情況下,如果任何人需要它,他/她可以要求?,請幫助我?

回答

0

在圖像資源添加X:共享=「假」,以便爲每個圖標創建一個新的圖片。

<Setter.Value> 
    <Image Source="{Binding IconPath, Converter={StaticResource pathtoimage}}" x:Shared="False" /> 
</Setter.Value>