绑定到对象的属性

时间:2013-03-14 14:38:22

标签: c# wpf xaml data-binding binding

我有一个班级" A"。 这个A类有一个对象B。

我有一个数据网格。在这个数据网格上,我绑定了几个A属性。 我想再绑定一个B属性。

我试过了:

<DataGridTextColumn Binding="{ Binding B.strDes}" Header="   Libellé type évènement   " Width="Auto" IsReadOnly="True"  />

我的问题是没有显示值。

B是对象属性,strDes是B属性。

我怎样才能在xaml中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此语法

{Binding ElementName=B,  Path=strDes}

注意:不要忘记来源

DataContext="{Binding Source=yourData}"

答案 1 :(得分:1)

我试过你的例子并且工作正常:

XAML:

<Window x:Class="DataGridBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid ItemsSource="{Binding ObjectAList}">      
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{ Binding ObjectB.strDes}" Header="   Libellé type évènement   " Width="Auto" IsReadOnly="True"  />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

代码隐藏:

public partial class MainWindow : Window
{
   public List<A> AList { get; set; }

   public MainWindow()
   {
      InitializeComponent();
      AList= new List<A>();
      AList.Add(new A());
      AList.Add(new A());
      AList.Add(new A());
      AList.Add(new A());
      DataContext = this;
   }
}

A类和B类:

public class A
{
   public B B { get; set; }

   public A()
   {
      B=new B();
   }
}

public class B
{
   private static int counter = 0;
   public string strDes { get; set; }

   public B()
   {
      strDes = "foo"+counter;
      counter++;
   }
}

输出:

enter image description here

编辑: 提示检查您的绑定。将TraceLevel设置为“High”以获取有关它的更多信息:

<DataGridTextColumn Binding="{ Binding B.strDes, PresentationTraceSources.TraceLevel=High}" Header="   Libellé type évènement   " Width="Auto" IsReadOnly="True"  />