0

我设置了一个窗口,显示 xml 文件中的数据,并允许用户更改、保存等。除了我想要一个显示文件路径的文本框或文本块之外,我已经设置了很多东西用户正在使用的当前文件。

我设置了一个名为“xmlData”的 XmlDataProvider,并且我的文本绑定如下:

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

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

4

2 回答 2

1

问题是它XmlDataProvider.Source不是Uri一个字符串。所以你会想要做类似的事情:

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

绝对路径不会给你类似的东西:C:\My documents\test.xml但是,它更有可能是类似的东西:file://c:/my documents/test.xml。所以你需要找到一种很好的方法来操纵源Uri以获得你想要的东西。

您可以做的一件事是使用Converter对其进行解析并返回您想要的内容。

看起来也Uri.LocalPath可能会给你你想要的东西,但如果没有测试,我不能 100% 确定。

于 2012-08-20T18:07:15.733 回答
0

好吧,我想出了一些可行的方法,但这不是我想要的。我最终选择了“老派”。我在后面的代码中的表单上放置了一个标准属性,并带有一个支持变量和 get/set 方法。在 set 方法中,我只是将 text 属性设置为与支持变量相同的值。

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

——我试过的——

在上述回答/对话之后,我尝试将一个转换器插入其中,简单地将值返回,以便我可以在调试器中闯入它并查看传递给转换器的内容。无论我做了什么,我都无法让它达到断点,所以它似乎由于某种原因甚至没有到达转换器。

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

就像我说的那样,我所拥有的正在工作,我想这是合理的,但如果有人可以就为什么这不起作用增加洞察力,我会很想知道。我对 WPF 相当陌生,所以我想学会正确地做这些事情......

于 2012-08-21T16:05:34.587 回答