【问题标题】:What is the appropriate way to replace local: keyword with a path?用路径替换 local: 关键字的适当方法是什么?
【发布时间】:2018-02-09 04:18:53
【问题描述】:

问题

取如下代码sn-p:

<DataTemplate DataType="{x:Type local:TestViewModel}">
        <local:TestView></local:TestView>
</DataTemplate>

local: 是这样定义的:

xmlns:local="clr-namespace:Palette_Packing"

现在,TestViewModel 位于一个子文件夹中,对应的命名空间为 Palette_Packing.ViewModels。 显然,local: 指的是一个不同的命名空间,其中没有找到 TestViewModel

如何将local: 替换为我的TestViewModel 的适当路径?

到目前为止我已经尝试过什么

当然我尝试了以下方法:

<DataTemplate DataType="{x:Type Palette_Packing.ViewModels.TestViewModel}">
        <Palette_Packing.Views.TestView></Palette_Packing.Views.TestView>
</DataTemplate>

但是,这会产生有关不受支持的嵌套类型的错误。

TestViewModel 类设置为public 也不能解决问题。

免责声明

代码 sn-ps 显示一个 ViewModel 和一个 View,两者都存在问题。为了清楚起见,我只询问了 ViewModel。

此外,如果将 ViewModel 和 View 从其子文件夹移动到主目录,local: 可以正常工作,正如预期的那样。

【问题讨论】:

    标签: c# wpf xaml mvvm namespaces


    【解决方案1】:

    声明另一个命名空间

    xmlns:vm="clr-namespace:Palette_Packing.ViewModels"
    

    然后写

    DataType="{x:Type vm:TestViewModel}"
    

    【讨论】:

    • 谢谢,它正在工作!只是为了澄清:我可以考虑这个好的做法(如“它非常方便,我会经常使用它。”)或者这只是一个快速修复?重点是,如果我犯了一个只能通过一些快速而肮脏的修复来解决的错误,我想变得更好并理解。
    • 这是在 XAML 中声明和使用 CLR 命名空间的唯一方法。
    • @pat3d3r, xmlns:vm="clr-namespace:Palette_Packing.ViewModels" 在 xaml 中与 using Palette_Packing.ViewModels 在 c# (.cs) 中相同。 (或者更确切地说using vm = Palette_Packing.ViewModels)。一个好的做法是只声明你需要的命名空间并保持代码干净,在这里很难搞砸。
    猜你喜欢
    • 2017-01-01
    • 2018-12-26
    • 2020-02-12
    • 2014-12-27
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多