将文本框文本绑定到xml文件的磁盘路径

时间:2012-08-20 18:03:55

标签: wpf xml data-binding

我有一个窗口设置,显示xml文件中的数据,并允许用户更改,保存等。我几乎设置了evertything除了我想要一个文本框或文本块显示用户正在使用的当前文件的文件路径。

我有一个名为' xmlData'的XmlDataProvider设置我的文本绑定如下:

Text="{Binding Path=Source, Source={StaticResource xmlData}}"

我还尝试过datacontext到上面的静态资源,虽然我知道数据提供程序中有一个xml文件(我可以写入它),但它们都只给我一个空白文本框。我错过了什么,或者这不是这样做的吗?

2 个答案:

答案 0 :(得分:1)

问题是XmlDataProvider.SourceUri而不是字符串。所以你会想做类似的事情:

Text="{Binding Path=Source.AbsolutePath, Source={StaticResource xmlData}}"

绝对路径不会给你类似的东西:C:\My documents\test.xml但是,它更像是:file://c:/my documents/test.xml。因此,您需要找到一种操作源Uri以获得所需内容的好方法。

您可以做的一件事是使用Converter来解析它并返回您想要的内容。

看起来Uri.LocalPath也可能会给你你想要的东西,但我不是100%肯定而不测试它。

答案 1 :(得分:0)

好吧我觉得有些东西可行,但这不是我想要的。我最后还是去了“老学校”。我在后面的代码中使用支持变量和get / set方法在我的表单上放置了一个标准属性。在set方法中,我只需将text属性设置为与后备变量相同的值。

我正在等待将此标记为答案,看看是否有人有更好的解决方案。

- 我尝试了什么 -

在上面的回答/对话之后,我试着坚持使用转换器,只需返回值,这样我就可以在调试器中查看它,看看传递给转换器的是什么。无论我做了什么,我都无法达到断点,所以看起来它甚至没有因为某些原因而进入转换器。

然后我尝试在表单本身后面的代码上定义依赖项属性,并将标准属性定义为包装器(其中get和set只使用依赖项属性上的GetValue和SetValue)并将文本框文本绑定到该属性使用relativesource和findancestor。基本上我将文本绑定到表单的属性。然后,每当用户浏览新文件时,我都会使用代码中的包装器更改属性。这适用于加载,但每当我在代码中设置值时,它都不会更新文本框中的文本。我甚至使用诊断将绑定跟踪设置为高;我看到它找到了表单并说它绑定了值等等,但每当我点击浏览方法并更改路径时,我都没有输出,也没有更改文本。

就像我说的那样,我的工作是有道理的,我猜是合理的,但是如果有人能够增加洞察力,为什么这不起作用,我会非常有兴趣知道。我是WPF的新手,所以我想学习正确地做这些事情......