为什么在这种情况下其中一条路径没有绑定?

时间:2009-06-10 20:29:16

标签: wpf data-binding linq-to-xml

Elements和FirstAttribute绑定正如我所期望的那样(如果我不知道它是一个方法),但Attributes不是,尽管是XElement的成员,就像其他人一样。我知道IValueConverter,我正在使用它来获取我想要的属性绑定,但我很好奇为什么它适用于Elements。

<Window x:Class="WpfApplication6.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
  <StackPanel>
    <TextBlock Text="{Binding Path=FirstAttribute}" />
    <ListBox ItemsSource="{Binding Path=Elements}" />
    <ListBox ItemsSource="{Binding Path=Attributes}" />
  </StackPanel>
</Window>


using System.Linq;
using System.Windows;
using System.Xml.Linq;

namespace WpfApplication6 {
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window {
        public Window1() {
            InitializeComponent();

            XDocument doc = new XDocument(
                new XElement("Parent",
                    new XAttribute("attr1", "val"),
                    new XAttribute("attr2", "val"),
                    new XElement("Child1"),
                    new XElement("Child2")
                    )
                );

            MessageBox.Show("Elements: " + doc.Elements().First().Elements().Count());
            MessageBox.Show("Attributes: " + doc.Elements().First().Attributes().Count());

            DataContext = doc.Elements().First();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

你确定Elements有效吗?因为据我所知,你不能直接绑定到方法。元素和属性都是方法,为了解决这个问题,请参阅this question

答案 1 :(得分:0)

在MSDN上得到答案:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/4be39d21-c9d8-4781-9337-2cb1215ec3d1/

基本上,XAML团队专门为XLinq添加了PropertyDescriptors以进行绑定,但必须忘记属性......