C# WPF数据网格:在使用ItemsSource时,操作无效。

C# WPF数据网格:在使用ItemsSource时,操作无效。,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,请看下面我的XAML:基本上,我正在尝试创建一个分层数据网格 <Window x:Class="My.Forms.Wpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Asst="clr-namespace:mY.Data;assembl

请看下面我的XAML:基本上,我正在尝试创建一个分层数据网格

<Window x:Class="My.Forms.Wpf.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Asst="clr-namespace:mY.Data;assembly=Assette.Data"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ObjectDataProvider x:Key="src" ObjectType="{x:Type Asst:CustomerRepo}" ></ObjectDataProvider>
</Window.Resources>
<Grid DataContext="{StaticResource src}">
    <DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False" RowDetailsVisibilityMode="Collapsed" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
            <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
            <DataGridTextColumn Header="Email" Binding="{Binding Email}" />
            <DataGridTextColumn Header="Telephone" Binding="{Binding Telephone}" />
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Click="ShowHideDetails">Details</Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Orders}" AutoGenerateColumns="False">
                    <DataGridTextColumn Header="Product Name" Binding="{Binding ProductName}" />
                    <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" />
                    <DataGridTextColumn Header="Unit Price" Binding="{Binding UnitPrice}" />
                    <DataGridTextColumn Header="Total Price" Binding="{Binding TotalPrice}" />
                </DataGrid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>
</Grid>

细节

这已绑定到内存中的集合:

   public class CustomerRepo
{
    public ObservableCollection<Customer> Customers { get; set; }
    //CustomerDataEntities custDb = new CustomerDataEntities();
    public CustomerRepo()
    {
        Customers = new ObservableCollection<Customer>();
        Customers.Add(new Customer { FirstName = "John", LastName = "Doe", Email = "aneef@xyz.com", Telephone = "+94773260789" });
        Customers.Add(new Customer { FirstName = "Albert", LastName = "Einstein", Email = "eienstain@xyz.com", Telephone = "+46546546" });
        Customers.Add(new Customer { FirstName = "Carlos", LastName = "Puyol", Email = "puyol@barca.com", Telephone = "+5465465" });


        var customer1 = new Customer { FirstName = "Lionel", LastName = "Messi", Email = "messi@barca.com", Telephone = "+756454686" };
        customer1.Orders.Add(new Order { ProductName = "Boot", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });
        customer1.Orders.Add(new Order { ProductName = "Soccer Ball", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });
        customer1.Orders.Add(new Order { ProductName = "Jersey", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });

        Customers.Add(customer1);

        var customer2 = new Customer { FirstName = "Gerath", LastName = "Bale", Email = "bale@madrid.com", Telephone = "+12312333" };
        customer2.Orders.Add(new Order { ProductName = "Shorts", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });
        customer2.Orders.Add(new Order { ProductName = "Guards", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });
        customer2.Orders.Add(new Order { ProductName = "Sports Bag", Quantity = 1, UnitPrice = 100, TotalPrice = 200 });

        Customers.Add(customer2);

        Customers.Add(new Customer { FirstName = "Cristiano", LastName = "Ronaldo", Email = "ronaldo@madrid.com", Telephone = "+234234234" });
        Customers.Add(new Customer { FirstName = "Iker", LastName = "Cassilas", Email = "cassilas@madrid.com", Telephone = "+54645645" });
    }
}
公共类CustomerRepo
{
公共ObservableCollection客户{get;set;}
//CustomerDataEntities custDb=新CustomerDataEntities();
公共客户报告()
{
客户=新的可观察收集();
添加(新客户{FirstName=“John”,LastName=“Doe”,Email=”aneef@xyz.com“,电话=”+94773260789“});
添加(新客户{FirstName=“Albert”,LastName=“Einstein”,Email=”eienstain@xyz.com“,Telephone=“+46546546”});
添加(新客户{FirstName=“Carlos”,LastName=“Puyol”,Email=”puyol@barca.com“,Telephone=“+5465465”});
var customer1=新客户{FirstName=“Lionel”,LastName=“mesi”,Email=”messi@barca.com“,Telephone=“+756454686”};
customer1.Orders.Add(新订单{ProductName=“Boot”,数量=1,单价=100,总价=200});
customer1.Orders.Add(新订单{ProductName=“足球”,数量=1,单价=100,总价=200});
customer1.Orders.Add(新订单{ProductName=“Jersey”,数量=1,单价=100,总价=200});
Customers.Add(customer1);
var customer2=新客户{FirstName=“Gerath”,LastName=“Bale”,Email=”bale@madrid.com“,Telephone=“+12333”};
customer2.Orders.Add(新订单{ProductName=“Shorts”,数量=1,单价=100,总价=200});
customer2.Orders.Add(新订单{ProductName=“Guards”,数量=1,单价=100,总价=200});
customer2.Orders.Add(新订单{ProductName=“Sports Bag”,数量=1,单价=100,总价=200});
Customers.Add(customer2);
添加(新客户{FirstName=“克里斯蒂亚诺”,LastName=“罗纳尔多”,电子邮件=”ronaldo@madrid.com“,Telephone=“+234234”});
添加(新客户{FirstName=“Iker”,LastName=“Cassilas”,Email=”cassilas@madrid.com“,Telephone=“+54645645”});
}
}
基本上,当我点击details按钮时,我希望它显示detailsview,这是另一个网格。如果详细信息网格设置为AutoGenerateColumns=true,则一切正常,但当我手动设置列详细信息时,会引发以下异常:

ItemsSource正在使用时,操作无效。访问和修改 改为使用ItemsControl.ItemsSource的元素


有什么想法吗?

对于内部数据网格,您忘记了将列包装在
标记下:

<DataGrid ItemsSource="{Binding Orders}" AutoGenerateColumns="False">
  <DataGrid.Columns> <-- This is missing.
     <DataGridTextColumn Header="Product Name" Binding="{Binding ProductName}" />
     <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" />
     <DataGridTextColumn Header="Unit Price" Binding="{Binding UnitPrice}" />
     <DataGridTextColumn Header="Total Price" Binding="{Binding TotalPrice}" />
  </DataGrid.Columns>
</DataGrid>


谢谢……啊。。我的脸上应该挨一记重拳,你打我的时候也要揍我,我三个