C#和WPF中的多对多数据绑定

时间:2014-07-18 00:03:34

标签: c# wpf

我正在尝试关注Beth Massi's Many to Many Data Binding教程。本教程对我来说最有意义,因为它符合我的思路。但是,请提供您能想到的其他选项。

我正在尝试使用代码隐藏中的WPF UI和C#,使用略有不同的数据集来复制教程的结果。

您可以在http://i.stack.imgur.com/czrf5.png

查看我的数据集

我已根据教程成功构建了UI,但我暂时离开了绑定到Drawings_Wires表的数据网格。我的(VS 2013生成)XAML是:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:AdventureWorksOrdersViewer"        x:Class="AdventureWorksOrdersViewer.MainWindow"
        Title="MainWindow" Height="800" Width="800" Loaded="Window_Loaded">
    <Window.Resources>
        <local:TESTDataSet x:Key="tESTDataSet"/>
        <CollectionViewSource x:Key="drawingsViewSource" Source="{Binding Drawings, Source={StaticResource tESTDataSet}}"/>
        <CollectionViewSource x:Key="drawingsDrawings_WiresViewSource" Source="{Binding FK_DWGAutoKey, Source={StaticResource drawingsViewSource}}"/>
        <CollectionViewSource x:Key="wiresViewSource" Source="{Binding Wires, Source={StaticResource tESTDataSet}}" />
    </Window.Resources>
    <Grid DataContext="{StaticResource drawingsViewSource}" >

        <DataGrid x:Name="drawingsDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Margin="0,0,0,570" ItemsSource="{Binding}" EnableRowVirtualization="True" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="dWG_Auto_KeyColumn" Width="SizeToHeader" IsReadOnly="True" Header="DWG Auto Key" Binding="{Binding DWG_Auto_Key}"/>
                <DataGridTextColumn x:Name="dWG_NumberColumn" Width="SizeToHeader" Header="DWG Number" Binding="{Binding DWG_Number}"/>
                <DataGridTextColumn x:Name="titleColumn" Width="SizeToHeader" Header="Title" Binding="{Binding Title}"/>
                <DataGridTextColumn x:Name="revisionColumn" Width="SizeToHeader" Header="Revision" Binding="{Binding Revision}"/>
            </DataGrid.Columns>
        </DataGrid>
        <DataGrid x:Name="wiresDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource wiresViewSource}}" Margin="0,489,0,67" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="wire_Auto_IDColumn1" Binding="{Binding Wire_Auto_ID}" Header="Wire Auto ID" IsReadOnly="True" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="wireCodeColumn" Binding="{Binding WireCode}" Header="Wire Code" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="wireLengthColumn" Binding="{Binding WireLength}" Header="Wire Length" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="wireTypeColumn" Binding="{Binding WireType}" Header="Wire Type" Width="SizeToHeader"/>
            </DataGrid.Columns>
        </DataGrid>
        <DataGrid x:Name="drawings_WiresDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource drawingsDrawings_WiresViewSource}}" Margin="58,233,334,337" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="dWG_Auto_KeyColumn1" Binding="{Binding DWG_Auto_Key}" Header="DWG Auto Key" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="wire_Auto_IDColumn" Binding="{Binding Wire_Auto_ID}" Header="Wire Auto ID" Width="SizeToHeader"/>
            </DataGrid.Columns>
        </DataGrid>



    </Grid>
</Window>

我的问题是当drawingsDrawings_WiresViewSource Collection改变类似于Beth在她的教程中使用的OrderDetailBindingSource.ListChanged事件时,如何在C#中触发事件。

我甚至不知道从哪里开始,因为我还是WPF和C#的新手。我尝试将以下行添加到Window_Loaded事件中,但它没有做任何事情。我承认,虽然我很有希望,并没有真正期望它能够发挥作用。

drawingsDrawings_WiresViewSource.View.CollectionChanged += View_CollectionChanged;

void View_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            throw new NotImplementedException();
        }

如果有人愿意花一些时间来启发我,我将不胜感激。

提前致谢,

theoleric

0 个答案:

没有答案