使用ClickOnce为XmlDataProvider设置Xaml属性

时间:2018-04-13 06:38:26

标签: wpf xaml 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类属性分配给元素的Source属性?

1 个答案:

答案 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这样的标记语言不支持的动态内容。