我有一个 WPF 应用程序,它根据 xml 文件的内容在列表框中显示项目。xaml 目前如下所示:
<Window.DataContext>
<XmlDataProvider Source="DbPaths.xml"
XPath="Databases/Database"></XmlDataProvider>
</Window.DataContext>
这在 F5 调试时工作正常。我的问题是,当应用程序从 ClickOnce 安装运行时,永远不会找到 dbpaths.xml因为它位于数据目录中而不是 exe 的目录中。
在代码隐藏中(此应用程序不使用 mvvm(,我可以像这样为文件的路径设置一个属性:
public string DbPath { get; set; }
if (ApplicationDeployment.IsNetworkDeployed)
{
DbPath = ApplicationDeployment.CurrentDeployment.DataDirectory + @"DbPaths.xml";
}
else
{
DbPath = "DbPaths.xml";
}
我的问题是,我不知道如何在运行时将 DbPath 类属性分配给元素的 Source 属性?
可以在窗口的构造函数中以编程方式创建XmlDataProvider
,而不是在 XAML 标记中创建它:
public MainWindow()
{
InitializeComponent();
XmlDataProvider provider = new XmlDataProvider()
{
XPath = "Databases/Database"
};
provider.Source = ApplicationDeployment.IsNetworkDeployed ?
ApplicationDeployment.CurrentDeployment.DataDirectory + @"DbPaths.xml" : "DbPaths.xml";
DataContext = provider;
}
每当你想要执行标记语言(如 XAML(不支持的动态操作时,这是常规解决方案。