C# 如何在运行时设置视图/视图模型数据模板?
这个MVVM的东西让我头疼。我有一个应用程序,在左窗格中有一个编辑器列表。右边是一个选项卡控件,其中将显示编辑器。我有一个主应用程序视图模型,其中包含一组视图模型。我将此集合称为工作区。这是从微软提供的MvvmDemoApp借用的C# 如何在运行时设置视图/视图模型数据模板?,c#,.net,wpf,mvvm,datatemplate,C#,.net,Wpf,Mvvm,Datatemplate,这个MVVM的东西让我头疼。我有一个应用程序,在左窗格中有一个编辑器列表。右边是一个选项卡控件,其中将显示编辑器。我有一个主应用程序视图模型,其中包含一组视图模型。我将此集合称为工作区。这是从微软提供的MvvmDemoApp借用的 公共ObservableCollection工作区 { 得到 { ... } } 这些工作区绑定到主应用程序窗口中的选项卡控件,如下所示: <DataTemplate x:Key "WorkspacesTemplate"> <TabContro
公共ObservableCollection工作区
{
得到
{
...
}
}
这些工作区绑定到主应用程序窗口中的选项卡控件,如下所示:
<DataTemplate x:Key "WorkspacesTemplate">
<TabControl
IsSynchonizedWithCurrentItem="True"
ItemSource="{Binding Workspaces}"
SelectedItem="{Binding ActiveWorkspace}"/>
</DataTemplate>
...
<ContentControl
Content="{Binding}"
ContentTemplate="{StaticResource WorkspacesTemplate}"/>
...
视图模型使用数据模板绑定到视图,如下所示:
<DataTemplate DataType="{x:Type vm:MessageLogViewModel}">
<vw:MessageLogView/>
</DataTemplate>
这个很好用。但是,现在我需要使应用程序可配置,从配置文件读取编辑器列表。我想这个配置文件将包含每个编辑器的视图和视图模型组件。但是,我如何将两者结合在一起,以便当有人绑定到视图模型(或视图模型的集合)时,能够显示正确的视图(类似于DataTemplate所做的,只是在代码中,而不是在XAML中)
我试图远离控制反转(IoC)技术。我不确定我们的团队是否已经准备好进行这项复杂的工作。IoC是解决这一问题的完美解决方案,但是如果没有此选项,您可以使用XmlWriter在视图模型中创建XAML数据模板,并将其作为要绑定的属性公开 编辑:绑定 您有视图模型列表。在每个视图模型(在基本视图模型类中)中创建并公开此XamlTemplate属性。属性应沿以下行创建Xaml:
<DataTemplate xmlns:vw="...">
<vw:MessageLogView/>
</DataTemplate>
你能详细说明一下吗?谁将绑定到数据模板属性?
<DataTemplate xmlns:vw="...">
<vw:MessageLogView/>
</DataTemplate>
<ContentControl Content="{Binding ViewModel}"
ContentTemplate="{Binding ViewModel.XamlTemplate}" />