使用 ClickOnce 为 XmlDataProvider 设置 Xaml 属性

Setting Xaml Property for XmlDataProvider with ClickOnce

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

您可以在 window 的构造函数中以编程方式创建 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 等标记语言不支持的动态操作时。