从PCL View Model动态加载控件内容

时间:2014-06-24 08:09:13

标签: wpf silverlight mvvm portable-class-library

我有一个在WPF中运行良好的MVVM项目。它基本上是一个TabControl,它根据所选实体的类型动态加载其TabItems。 TabItem ViewModel在运行时实例化(使用Activator.CreateInstance),以便允许反复实现新选项卡而不会影响主项目。 TabItem ViewModel类的全名可以为每种实体配置。

在WPF中,我采用了以下方法:

每个TabItem ViewModel通过从资源文件中检索它来公开其ContentTemplate:

public class CustomEntityPropertyTab : EntityPropertyTabViewModelBase
{
    public override DataTemplate ContentTemplate
    {
        get
        {
            ResourceDictionary dic = new ResourceDictionary();
            dic.Source = new Uri("/CustomProject;component/View/CustomProject.Resources.xaml", UriKind.RelativeOrAbsolute);
            return dic["customEntityPropertyTab"] as DataTemplate;
        }
    }
}

主TabControl ViewModel包含一个可观察的EntityPropertyTabViewModelBase集合 - 它绑定到主视图,如下所示:

<TabControl Name="EntityPropertyPageTabControl"
            ItemsSource="{Binding EntityPropertyTabs}" 
            SelectedItem="{Binding SelectedPropertyTab}"
            >
    <TabControl.ItemContainerStyle>
     <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding Header}"/>
            <Setter Property="ContentTemplate" Value="{Binding ContentTemplate}"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

但是现在,我需要在Silverlight中使用它...所以我打算在可移植类库中分离ViewModel逻辑,但它不起作用,因为PCL不支持DataTemplate财产:( 那么实现WPF和Silverlight UI之间共享的ViewModel动态加载的最佳方法是什么?

谢谢

0 个答案:

没有答案