2014-07-10 162 views
-1

在Omer van Kloeten的example之後,我填入了一個菜單項,其中包含從可觀察集合中綁定的菜單項。我爲單個收藏品獲得了單個菜單項。好,但我其實需要更多。我也希望能夠爲一個收藏品項目提供包含兩個或三個子項目的菜單項目。下面是一些草圖:每個綁定項目的子菜單

What I Have   What I Want 
+ First Item  + Create First Item 
+ Second Item  + Second Item 
         + Delete 
         + Update 

這裏的「第一項」有產權Exists = false,但「第二項」有它true。我當前的代碼:

public class CollectionItem 
{ 
    public string Name { get; set; } 
    public bool Exists { get; set; } 
} 

public partial class MainWindow : Window 
{ 
    ObservableCollection<CollectionItem> items; 

    public MainWindow() 
    { 
     items = new ObservableCollection<CollectionItem>(); 
     items.Add(new CollectionItem() { Name = "First Item", Exists = false }); 
     items.Add(new CollectionItem() { Name = "Second Item", Exists = true }); 
     AllItems.ItemsSource = items; 
    } 
} 

<MenuItem x:Name="AllItems" Header="What I Have"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Setter Property="Header" Value="{Binding Path=Name}" /> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 

如何將簡單菜單項與子項混合?

回答

3

如何將簡單菜單項與子項混合?

首先,您需要讓您的數據結構適當,並用集合屬性來表示子節點,或者子節點MenuItem s。然後,您需要使用MenuItem.ItemContainerStyle將收集屬性綁定到父項MenuItemItemsSource屬性,與您現在正在執行的操作類似。您應該結束了,像這樣:

public class CollectionItem 
{ 
    public string Name { get; set; } 
    public bool Exists { get; set; } 
    public ObservableCollection<CollectionItem> CollectionOfSubItems { get; set; } 
} 

...

<MenuItem x:Name="AllItems" Header="What I Have"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Setter Property="Header" Value="{Binding Path=Name}" /> 
      <Setter Property="ItemsSource" Value="{Binding CollectionOfSubItems}" /> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 
+0

我希望的方式有我的商業模式從GUI分離。有沒有辦法使用'Exists'屬性? – Dialecticus

+0

不要在這裏混淆......你有一個商業模式和一個與用戶界面相關的模型。 UI相關模型包含數據綁定你的MenuItem所需的所有UI相關屬性。 UI相關模型*可能會從業務模型中獲取一些值,但這並不會使其成爲業務模型。分離您的擔憂......我們不保存這些與用戶界面相關的值 - 這只是針對用戶界面。 – Sheridan

+0

我的應用程序很小。因爲我不得不在兩種模型之間做出某種轉換器,所以這種解決方案感覺像是一種矯枉過正,我不打算使用它,只是手動做些東西。我測試了這個解決方案,它可以完成盒子上寫的內容,所以如果一週內沒有更好的答案,我會接受它。 – Dialecticus