使用 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 等标记语言不支持的动态操作时。
我有一个 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 等标记语言不支持的动态操作时。