首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XmlDataProvider设置ClickOnce属性

用XmlDataProvider设置ClickOnce属性
EN

Stack Overflow用户
提问于 2018-04-13 06:38:26
回答 1查看 28关注 0票数 0

我有一个WPF应用程序,它根据xml文件的内容在列表框中显示项目。xaml目前的情况如下:

代码语言:javascript
复制
<Window.DataContext>
    <XmlDataProvider Source="DbPaths.xml"
                     XPath="Databases/Database"></XmlDataProvider>
</Window.DataContext>

当F5调试时,这很好。我的问题是,当应用程序是从ClickOnce安装中运行时,就永远找不到dbpaths.xml,因为它位于数据目录而不是exe目录中。

在代码隐藏(此应用程序不使用mvvm)中,我可以为文件路径设置一个属性,如下所示:

代码语言:javascript
复制
public string DbPath { get; set; }
if (ApplicationDeployment.IsNetworkDeployed)
{
    DbPath = ApplicationDeployment.CurrentDeployment.DataDirectory + @"\DbPaths.xml";
}
else
{
    DbPath = "DbPaths.xml";
}

我的问题是,我不知道如何在运行时将DbPath类属性分配给元素的Source属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 14:00:19

您可以在窗口的构造函数中以编程方式创建XmlDataProvider,而不是在XAML标记中创建它:

代码语言:javascript
复制
public MainWindow()
{
    InitializeComponent();

    XmlDataProvider provider = new XmlDataProvider()
    {
        XPath = "Databases/Database"
    };
    provider.Source = ApplicationDeployment.IsNetworkDeployed ?
        ApplicationDeployment.CurrentDeployment.DataDirectory + @"\DbPaths.xml" : "DbPaths.xml";

    DataContext = provider;
}

这是一个通用的解决方案,每当您想要做一些像XAML这样的标记语言不支持的动态的事情时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49810732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档