Sam*_*Sam 5 c# wpf design-time mvvm visual-studio
我有UserControl显示文件信息。我想使用视图模型模拟在 Visual Studio 设计器中查看测试文件信息。这是 XAML:
<Label Content="{Binding DateCreated}"/>
Run Code Online (Sandbox Code Playgroud)
视图模型:
internal class ViewModel
{
public ViewModel(string pathToFile)
{
var file = new FileInfo(pathToFile);
this.DateCreated= file.CreationTime.ToShortDateString();
}
public string DateCreated{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在设计时,我使用视图模型模拟类在设计器中看到真实的文件信息:
internal class ViewModelMock : ViewModel
{
public ViewModelMock() : base(@"D:\Images\mock.png")
{
}
}
Run Code Online (Sandbox Code Playgroud)
我通过d:DataContext和插入模拟到xaml d:DesignInstance:
<UserControl ...
xmlns:mocks="clr-namespace:Company.Product.Mocks"
d:DataContext="{d:DesignInstance mocks:ViewModelMock, DesignTimeCreatable=True}">
Run Code Online (Sandbox Code Playgroud)
它有效,但问题出在这个@"D:\Images\mock.png" 硬编码的 value 中。一旦解决方案由 TFS 提供支持,我需要将图像放入项目中,并从ViewModelMock, 相对于项目路径引用此图像。
我怎样才能做到这一点?
像获取当前工作目录这样的简单方法给出了“ C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE ”,我猜是因为这是负责 Visual Studio 设计器的 XDesProc.exe 的位置。
var solutionFullName = ((EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0")).Solution.FullName;
var projectPath = Path.Combine(Path.GetDirectoryName(solutionFullName), "ProjectFolderName");
Run Code Online (Sandbox Code Playgroud)
但这几乎有相同的问题 - 硬编码的“VisualStudio.DTE.12.0”常量(这意味着 Visual Studio 2013),所以我仍在努力寻找更好的解决方案。
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |