我試着的名單在WPF上下文菜單那是一個依賴屬性顯示出來,使內容。勢必列表WPF上下文菜單<>依賴屬性
我有以下依賴屬性的類,Foo的(數據保持類)的列表:
public List<Foo> FooList
{
get { return (List<Foo>)GetValue(FooListProperty); }
set { SetValue(FooListProperty, value); }
}
public static DependencyProperty FooListProperty =
DependencyProperty.Register("FooList", typeof(List<Foo>),
typeof(FooButton));
在XAML我設置了以下靜態資源,我認爲它的,因爲上下文菜單心不是需要可視化樹的一部分:以上的ResourceDictionary的
<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource
x:Key="FooListSource"
Source="{Binding FooList}"/>
<!-- ... -->
</ResourceDictionary>
</UserControl.Resources>
也有一部分是它使項目在實際的上下文菜單中出現需要CompositeCollection。如果UserControl CanStop屬性爲true,我們還會顯示一個分隔符和一個停止命令。儘管MenuItem本身顯示,但這些綁定也會失敗。所以如果我能弄清楚爲什麼這些失敗,那麼列表可能會更容易。
<CompositeCollection x:Key="FooListItems">
<CollectionContainer
Collection="{Binding Source={StaticResource FooListSource}}"/>
<Separator
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}" />
<MenuItem
Command="{x:Static Buttons:FooButton.Stop}"
Header="Stop"
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}"/>
</CompositeCollection>
最後上下文菜單本身,也是在ResourceDictionary中:
<ContextMenu
x:Key="FooButtonMenu"
ItemsSource="{Binding Source={StaticResource FooListItems}}"
ItemTemplate="{StaticResource FooListTemplate}"
<ContextMenu.CommandBindings>
<CommandBinding
Command="{x:Static Buttons:FooButton.Stop}"
Executed="Stop_Executed" />
</ContextMenu.CommandBindings>
</ContextMenu>
我覺得林發帖的方式很多代碼,但林不知道我可以做這一塊的任何簡單。只有分隔符和硬編碼的菜單項出現。所以有些東西必須與綁定混淆。綁定通常並不那麼困難,但現在當我想綁定一些不屬於同一棵樹的東西時,我感覺有點失落。
歡迎任何建議。 :)
你如何使用FooList的DependencyProperty?特別是,您是否將完全填充的列表分配給屬性,或者您是否將空列表分配給屬性,然後再填充列表?該會的DependencyProperty傳播分配到一個完全新的列表,但如果要監視列表中的變化,你需要使用的ObservableCollection或其他一些實現INotifyCollectionChanged的。 – 2010-03-17 15:32:18
調用一個函數來觸發數據從舊系統中讀取,我循環執行'FooList'的數據。加入(myNewFoo);'。你是說我應該簡單地將'List <>'換成'ObservableCollection <>'? – Mizipzor 2010-03-17 15:38:04
呃..一切似乎都對我好!你能否把你的演示項目上傳到某個地方?可能是你缺少一個DataContext? – mg007 2010-03-17 18:45:36