我正在尝试关注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