动态设置 XMLDataProvider 源

Set XMLDataProvider source dynamically

虽然我找到的所有示例和来源都是静态设置 XAML 中的资源,但我只会在 运行 时间知道要连接的 XML 文件的名称XML数据提供者。有没有办法在代码后面或 XAML?

中设置
<Window.Resources>
    <XmlDataProvider x:Key="XMLFoo" Source="Foo.xml" XPath="Foo"/>
</Window.Resources>

可能是 Foo.xml,也可能是 Goo.xml。

是的,您可以在运行时更改它。不幸的是你不能绑定它,所以你必须在代码隐藏中做一些事情。

这是一个简单的例子:

(this.Resources["XMLFoo"] as XmlDataProvider).Source = new Uri("Goo.xml");

干杯

如果您尝试只有一个 XamlDataProvider 实例,并且希望您的源动态更改,我认为在纯 XAML 中不可能,因为您无法绑定到 Source 属性,因为那不是 DependencyProperty

从代码隐藏中,您可以获取提供者的实例并更改其源。

var provider = (XmlDataProvider) Resources.FindName("XMLFoo");
provider.Source = new Uri("bar.xml", UriKind.Relative);

或者,您可以使用 MVVM 并将您的 XmlDataProvider 公开为 ViewModel 上的 属性 并将其绑定到您的视图,然后您可以更改 Source 并刷新数据ViewModel 本身。