我创建了一个BaseWindowView
和我想在我的所有应用程序的基础要使用的自定义的框架BaseViewModel
。如何在应用程序中使用框架中的视图? (WPF MVVM)
在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中没有“经典继承”。我可以做一些像在框架视图中将中的StartUpUri
这样的定义,还是“稍微有点棘手”?
作为补充:我发现我可以在App.xaml
像下面的定义DataTemplate
用于TabItems
(其是UserControls
):
<DataTemplate DataType="{x:Type ViewModel:AnyViewModel}">
<view:TabItemAny/>
</DataTemplate>
@Sheridan:这里是关于BaseWindowView
的问题。
的问题不是很清楚:这是什么问题?哟意识到没有XAML继承这样的东西? –
是的,我知道没有“经典继承”。我的问题是我如何做一些像视图的继承。我想在我的应用程序中显示我的'Framework-View'作为MainWindow,并且只需添加一些用于在此窗口中打开Tabs的UserControls。 – Tobias
@Sheridan,这是问题 – Tobias