代码之家  ›  专栏  ›  技术社区  ›  Rob Bowman

使用ClickOnce设置XmlDataProvider的Xaml属性

  •  0
  • Rob Bowman  · 技术社区  · 7 年前

    我有一个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类属性分配给元素的源属性?

    1 回复  |  直到 7 年前
        1
  •  1
  •   mm8    7 年前

    您可以创建 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等标记语言不支持的动态操作,这都是通用的解决方案。

    推荐文章