【问题标题】:MVVMLight DataTemplates in assembly ressource dictionary程序集资源字典中的 MVVMLight DataTemplates
【发布时间】:2016-09-21 10:05:28
【问题描述】:

我正在使用用于 WPF 和 C# 的 MVVMLight 工具包。 有一个带有窗口(Shell)和控件所在的程序集(UI)的 WPF 应用程序。 ViewModel 位于第三个 DLL (BIZ) 中。

窗口中唯一显示的是一个名为“ShellView”的控件,它是主要的 UI 部分。我这样做是为了能够在不同的窗口中重用大部分应用程序。

目前我正在“Shell”App.config 中完成视图和视图模型之间的所有绑定。

我参考过:

程序集命名空间

xmlns:views="clr-namespace:Application.UI;assembly=Application.UI"
xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ"

Viewmodel 定位器

<vm:ViewModelLocator xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ" x:Key="Locator" d:IsDataSource="True" />

并使用了 DataTemplates

<DataTemplate  
    DataType="{x:Type vm:ShellVM}">
<views:ShellView />

因此,如果我将内容控件的内容绑定到“ViewModelBase”类,则视图会自动显示 - 一切正常。

现在我试图将数据模板的定义移动到 UI 程序集中,并在窗口应用程序中引用它。所以所有的模板和绑定都在 UI 程序集中完成,窗口只引用所有程序集并显示“ShellView”。

我的问题是: 这可能吗?我如何必须引用 App.xaml 中的程序集?目前我收到很多 xaml 解析异常。

提前谢谢你

【问题讨论】:

    标签: c# wpf xaml mvvm-light


    【解决方案1】:

    这样的事情应该可以工作,在你的新项目中添加一个资源字典并将你的模板添加到它

     <ResourceDictionary>
     <DataTemplate  x:Key="Foo" >
     </ResourceDictionary>
    

    在你的 app.xaml 中

     <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                path to your Foo datatemplate for example
                <ResourceDictionary Source="MyAssembly;component/MyFolder/MyResourceDictionary.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    </Application>
    

    然后从您的代码中您只需将其作为静态资源引用

    例子

     <ListBox ItemTemplate="{StaticResource Foo}"/>
    

    【讨论】:

    • 数据模板未在主应用程序窗口 xaml 中使用。只有在控制库中,您的解决方案是否也适用于此?我通常只将它们用于 View-ViewModel 绑定,例如: 数据模板完成其余工作
    • @pwoestmann 您可以在任何项目中拥有的 app.xaml。但是,在运行时,只使用 exe 项目中的一个。因此,如果您想坚持使用此解决方案,则必须复制此资源部分。所以一个在项目中你想使用你的数据模板,所以设计者不会抱怨,一个在主项目中,所以当它运行时它知道在哪里可以找到它们。
    猜你喜欢
    • 2011-04-28
    • 2023-03-16
    • 2017-12-03
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多