使用 ClickOnce 为 XmlDataProvider 设置 Xaml 属性



我有一个 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 属性?

可以在窗口的构造函数中以编程方式创建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(不支持的动态操作时,这是常规解决方案。

最新更新