[私がやろうとしていることをもう少し明確にするために質問を書き直しました]
私は何時間も尻尾を追いかけてきたので、誰かが私を助けてくれることを願っています. GUI出力は、WinForms以上のものを探しているものを反映しているため、WPFを理解しようとしています。
私は3つのコントロールを持っています:
コンボボックス
チェックリストボックス
データグリッド
結果を照会する必要がある 3 つのテーブル間の関係を使用して Datatable を設定したデータセットがあります。これは私の 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)が2つの端末名を入力すると、データグリッドに何も返されないという奇妙な問題があるようです。これは、フィルターがなくてもデータグリッドが他のすべての選択の結果を返すため、理解できません。(テーブルをチェックし、いくつかのクエリをテストしましたが、テーブル データではないようです)。
コードビハインドでこれを試しました:
public ObservableCollection<CheckedItem> List { get; set; }
public class CheckedItem
{
public bool Selected { get; set; }
public string Description { get; set; }
}
ただし、checkboxlist の DisplayMemberName も定義する必要があります。そうしないと、正しい値が返されません。ここでの問題は、XAML で itemlist を同時に使用できないことです。
とにかく、これを機能させるために6時間を費やし、絶望的に失われました。方向性や助けに非常に感謝します。
VS2010 WPF .net 4 を使用します。