【发布时间】:2013-08-27 13:29:54
【问题描述】:
我在一个自定义框架中创建了一个BaseWindowView 和一个BaseViewModel,我想在我的所有应用程序中将其用作基础。
在BaseViewModel 中,例如,我有一个允许我添加按钮的方法。我可以定义Command、ButtonImage 和LabelString。下面是该方法的调用示例代码:
AddButton(OpenAnyTabCommand, "../Images/image.png", "LabelString");
在我的BaseWindowView 中,我有一个RibbonMenue,其中显示了我在BaseViewModel 中定义的所有RibbonButtons:
<ItemsControl x:Name="CButtons" ItemsSource="{Binding Buttons}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel x:Name="ButtonStackPanel" Orientation="Horizontal">
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ribbon:RibbonButton
x:Uid="Button"
LargeImageSource="{Binding Path=ImageString}"
Label="{Binding Path=LabelString}"
Command="{Binding Path=ButtonCommand}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我在一个示例项目中有这个,它工作正常。现在我想将BaseWindowView 和BaseViewModel 外包给一个框架并从那里使用它。
我的计划是:在我的每个应用程序中,我想将BaseWindowView 设置为我的应用程序的MainWindow。在这个应用程序本身中,我只想拥有一些UserControls,它们应该在我的BaseWindowView 中显示为选项卡。我在BaseViewModel 中定义的按钮应该调用定义的Command,它会打开一个新选项卡并在Command 后面显示ViewModel。
那么解决我的问题的最佳方法是什么?我知道 XAML 中没有“经典继承”。我可以在框架视图中定义App.xaml 中的StartUpUri 还是“有点”棘手?
作为补充:我发现我可以在App.xaml 中为TabItems(即UserControls)定义DataTemplate,如下所示:
<DataTemplate DataType="{x:Type ViewModel:AnyViewModel}">
<view:TabItemAny/>
</DataTemplate>
@Sheridan:这是关于BaseWindowView 的问题。
【问题讨论】:
-
问题不是很清楚:问题是什么?你知道没有 XAML 继承这样的东西吗?
-
是的,我知道没有“经典继承”。我的问题是我怎么能做一些像视图继承这样的事情。我想将我的
Framework-View显示为我的应用程序中的主窗口,并添加一些用户控件以在此窗口中打开选项卡。 -
@Sheridan,这是问题