[重新写了这个问题,以便更清楚地了解我正在尝试做什么]
希望有人可以帮助我,因为我已经追了几个小时了。试图掌握 WPF,因为 GUI 输出反映了我所寻找的不仅仅是 WinForms。
我有 3 个控件:
组合框
清单框
数据网格
我有一个数据表,其中设置了我需要查询结果的 3 个表之间的关系。这是我的 XAML。
<xctk:CheckListBox DataContext="{Binding Path=NAME, UpdateSourceTrigger=PropertyChanged, Source={StaticResource _Regions__Terminal_ViewSource}}" ItemsSource="{Binding Source={StaticResource _Regions__Terminal_ViewSource}}" Margin="17,108,13,71" Name="clb_Terminals" SelectedItems="{Binding}" SelectedMemberPath="IsSelected" SelectedValue="{Binding Path=SelectedValue}" ValueMemberPath="Level" DisplayMemberPath="NAME" />
<Button Content="Refresh Forecast View" Height="48" HorizontalAlignment="Left" Margin="17,288,0,0" Name="button1" VerticalAlignment="Top" Width="220" />
<ComboBox DisplayMemberPath="GROUPNAME" Height="23" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource _Regions_ViewSource}}" Margin="22,52,0,0" Name="_Regions_ComboBox" SelectedValuePath="GROUPNUM" VerticalAlignment="Top" Width="215">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
</Grid>
</TabItem>
<TabItem Header="Advanced" Name="tabItem2">
<Grid />
</TabItem>
</TabControl>
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="380" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource _Regions__Terminal_GridViewViewSource}}" Margin="297,15,0,0" Name="gridViewDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="1148" DataContext="{Binding}" GridLinesVisibility="None">
<DataGrid.Columns>
<DataGridTextColumn x:Name="sTATNUMColumn" Binding="{Binding Path=STATNUM}" Header="STATNUM" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="jDEColumn" Binding="{Binding Path=JDE}" Header="JDE" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="cONTRACTColumn" Binding="{Binding Path=CONTRACT}" Header="CONTRACT" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="sTATIONNAMEColumn" Binding="{Binding Path=STATIONNAME}" Header="STATIONNAME" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="tOWNColumn" Binding="{Binding Path=TOWN}" Header="TOWN" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="tRIPTIMEColumn" Binding="{Binding Path=TRIPTIME}" Header="TRIPTIME" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="tERMINALColumn" Binding="{Binding Path=TERMINAL}" Header="TERMINAL" IsReadOnly="True" Width="*" />
<DataGridTextColumn x:Name="mAXSIZEColumn" Binding="{Binding Path=MAXSIZE}" Header="MAXSIZE" IsReadOnly="True" Width="*" />
</DataGrid.Columns>
</DataGrid>
到目前为止,这 3 个控件是通过父/子关系绑定的,但它并没有像我希望的那样工作,而且我有点超出我的深度。
我从组合框中选择我的区域,该组合框成功地用相应的终端填充了我的复选框。接下来我需要做的是,当检查每个终端时,它会过滤我的数据网格上的终端列,以仅显示与勾选的终端匹配的相应记录集。
我似乎也有一个奇怪的问题,默认组合框选择 (region1) 然后填充两个终端名称,在数据网格中没有返回任何内容。这我无法理解,因为即使没有过滤器,数据网格也会为其他所有选择返回结果。(检查了我的表格并测试了一些查询,但似乎不是表格数据)。
我在后面的代码中尝试了这个:
public ObservableCollection<CheckedItem> List { get; set; }
public class CheckedItem
{
public bool Selected { get; set; }
public string Description { get; set; }
}
但是,我还需要定义复选框列表的 DisplayMemberName,否则它无法返回正确的值。这里的问题是我不能同时在 XAML 中使用项目列表。
无论如何,花了 6 个小时试图完成这项工作,却无可救药地迷失了方向。非常感谢任何方向或帮助。
使用 VS2010 WPF .net 4。