在XAML设计器中评估项目完整路径(XDesProc.exe)

时间:2016-01-29 11:52:17

标签: c# wpf visual-studio mvvm design-time

我有UserControl显示文件信息。我希望使用视图模型模拟在visual studio designer中查看测试文件信息。这是XAML:

<Label Content="{Binding DateCreated}"/>

观看型号:

internal class ViewModel
{
    public ViewModel(string pathToFile) 
    {
        var file = new FileInfo(pathToFile);
        this.DateCreated= file.CreationTime.ToShortDateString();
    }

    public string DateCreated{ get; set; }
}

在设计时,我使用视图模型模拟类在设计器中看到真实的文件信息:

internal class ViewModelMock : ViewModel
{
    public ViewModelMock() : base(@"D:\Images\mock.png")
    {
    }
}

我通过d:DataContextd:DesignInstance

将模拟插件插入到xaml中
<UserControl ...
    xmlns:mocks="clr-namespace:Company.Product.Mocks"
    d:DataContext="{d:DesignInstance mocks:ViewModelMock, DesignTimeCreatable=True}">

虽然有效,但问题在于此@"D:\Images\mock.png" 硬编码值。一旦解决方案由TFS提供支持,我就需要将图像放入项目中,并相对于项目路径从ViewModelMock引用此图像。

我该怎么做?

获取当前工作目录等简单方法可以提供&#39; C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE &#39;,我猜是因为这是位置负责visual studio designer的XDesProc.exe。

目前我正在使用 EnvDTE 方法描述in this questions

var solutionFullName = ((EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0")).Solution.FullName;
var projectPath = Path.Combine(Path.GetDirectoryName(solutionFullName), "ProjectFolderName");

但这有几乎相同的问题 - 硬编码&#34; VisualStudio.DTE.12.0&#34;常量(这意味着Visual Studio 2013),所以我仍然在寻找更好的解决方案。

0 个答案:

没有答案