我有一个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属性?
答案 0 :(得分:1)
您可以在窗口的构造函数中以编程方式创建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这样的标记语言不支持的动态内容。