2013-12-23 182 views
2

我是WPF的新手,我嘗試使用來自視圖模型的上下文菜單項將上下文菜單綁定到按鈕。帶上下文菜單的WPF按鈕

這是我在做什麼:

<Button x:Name="btn" Content="Context Menu"> 
    <Button.ContextMenu> 
    <ContextMenu x:Name="cm" ItemsSource="ItemsList"/> 
    </Button.ContextMenu> 
</Button> 

private List<string> itemsList = null; 
public List<string> ItemsList 
{ 
    get 
    { 
    if(itemsList == null) 
     itemsList = new List<string>(myStringArrayOfItems); 
    return itemsList;     
    } 
} 

XAML編輯器不斷顯示錯誤:「IEnumerable的」的類型轉換器不支持從一個字符串轉換。

我在這裏做錯了什麼?

另外,假設我得到這個工作,我該怎麼做這些項目綁定到一個命令,並做一些工作,當項目被點擊?我想爲所有菜單項運行相同的命令,只是使用項目字符串作爲參數。

+0

對此有任何想法嗎? – Padmaja

回答

6

如果你做ItemsSource="ItemsList"你不綁定到ItemsList但將其設置爲字符串ItemsList,因此你的錯誤。嘗試像這樣綁定它:

<ContextMenu x:Name="cm" ItemsSource="{Binding Path=ItemsList}"/> 

作爲Command部分,你需要ICommand執行界面(如here),然後你把它綁定像ItemContainerStyle

<ContextMenu ...> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
     <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=PlacemantTarget.DataContext.ItemChanged }"/> 
     <Setter Property="CommandParameter" Value="{Binding}"/> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu > 
+0

謝謝你dkozl。我現在可以獲取數據。但由於某種原因,XAML一直在說「命令」不是我可以設置的屬性。我想我正在做一些愚蠢的事情,但不知道是什麼。 – Padmaja

+0

嘗試'