使用LINQ在WPF中的父表和子表之间绑定

时间:2011-11-03 14:29:26

标签: c# wpf linq

我有两个gridview控件,如父网格视图,如Order表和子gridview Order_Detail表。两者都绑在一起。如果从Order表中选择了一个订单,则Order_Details表中会显示相应的订单详细信息。问题是我想在Order_Details表中插入一条记录而不会丢失绑定。但是当我尝试插入记录时,它不会影响。数据源没有刷新..代码如下。

我怎样才能做到这一点? Plz帮助我......

public partial class MainWindow : Window
{
    DataClasses1DataContext dc = new DataClasses1DataContext();
    IBindingList l;       
    IBindingList p;     

    public MainWindow()
    {
        InitializeComponent();
        l = dc.Orders.GetNewBindingList();           
        gridControl1.ItemsSource = l;           
    }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        var source = gridControl2.ItemsSource;            
        System.Data.Linq.EntitySet<Order_Detail> b = 
            (System.Data.Linq.EntitySet<Order_Detail>)source;            

        b.Add(new Order_Detail { OrderID=1,ProductID=1});
        gridControl2.ItemsSource = b;
        gridControl2.RefreshData();//getting error

       // dc.SubmitChanges();      
    }
}

1 个答案:

答案 0 :(得分:0)

在WPF中,通常会声明包含您的数据的属性(在您的情况下是您的集合)。然后,您可以将ItemsSource的{​​{1}}属性绑定到您的媒体资源,并在ListView媒体资源中声明GridView。以下是基于this MSDN page的示例的示例。

ListView.View

使用此设置,您可以将新订单对象添加到Orders集合属性,并且假设您已使用<ListView ItemsSource="{Binding Orders}"> <ListView.View> <GridView> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Details" DisplayMemberBinding="{Binding Details}" /> <GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price}"/> </GridView> </ListView.View> </ListView> 个集合,ObservableCollection<T>将在UI中自动更新。