我有一个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类属性分配给元素的源属性?
您可以创建 XmlDataProvider 在窗口的构造函数中以编程方式创建,而不是在XAML标记中创建:
XmlDataProvider
public MainWindow() { InitializeComponent(); XmlDataProvider provider = new XmlDataProvider() { XPath = "Databases/Database" }; provider.Source = ApplicationDeployment.IsNetworkDeployed ? ApplicationDeployment.CurrentDeployment.DataDirectory + @"\DbPaths.xml" : "DbPaths.xml"; DataContext = provider; }
无论何时,只要您想执行XAML等标记语言不支持的动态操作,这都是通用的解决方案。