我有一個視圖模型(AbstractContextMenu)代表我的上下文菜單(IContextMenu),我綁定一個真正的文本菜單將其與一個DataTemplate:我可以使用DataTemplate將ContextMenu應用於ContextMenuViewModel嗎?
<DataTemplate DataType="{x:Type local:AbstractContextMenu}">
<ContextMenu x:Name="contextMenu"
ItemsSource="{Binding Path=(local:IContextMenu.Items)}"
IsEnabled="{Binding Path=(local:IContextMenu.IsEnabled)}"/>
</DataTemplate>
然後,我有一個虛擬ConcreteContextMenu進行測試,只是從AbstractContextMenu繼承。 AbstractContextMenu只是實現了這個接口:
public interface IContextMenu : IExtension
{
IEnumerable<IMenuItem> Items { get; set; }
bool IsEnabled { get; set; }
}
我用它作爲其他視圖模型對象的屬性:
public IContextMenu ContextMenu
{
get
{
return m_ContextMenu;
}
protected set
{
if (m_ContextMenu != value)
{
m_ContextMenu = value;
NotifyPropertyChanged(m_ContextMenuArgs);
}
}
}
private IContextMenu m_ContextMenu = new ConcreteContextMenu();
static readonly PropertyChangedEventArgs m_ContextMenuArgs =
NotifyPropertyChangedHelper.CreateArgs<AbstractSolutionItem>(o => o.ContextMenu);
然後我綁定一個StackPanel到視圖模型,並在StackPanel中ContextMenu屬性綁定到視圖模型的ContextMenu屬性:
<StackPanel Orientation="Horizontal"
ContextMenu="{Binding Path=(local:AbstractSolutionItem.ContextMenu)}"
ContextMenuOpening="stackPanel_ContextMenuOpening">
<!-- stuff goes in here -->
</StackPanel>
當我運行此,上的StackPanel中的ContextMenuOpening事件被激發,但文本菜單是NE顯示。我不確定我是否可以執行此操作(使用DataTemplate將ContextMenu應用於ContextMenu ViewModel)。有人知道嗎?
嗨安迪。 WPF可以識別我爲AbstractMenuItem定義的DataTemplate,它確實創建了菜單(畢竟是MVVM的核心),但正如你所說,似乎我不能將StackPanel.ContextMenu屬性綁定到一個隨機對象並讓WPF將我的DataTemplate應用到它。我希望有辦法解決這個問題,但看起來我的選擇是零。謝謝。太糟糕了 - 我試圖去完整的MVVM,但很難。 – 2010-02-27 04:30:41
這並沒有真正解決我的問題,但由於看起來沒有解決方案,我想要做什麼,這是「正確的」。 ;) – 2010-02-28 13:47:54