私はdaetagridとコンボボックスとテキストボックスをwpfのウィンドウに持っています。 XmaIでwpfでDataGridの行を選択すると、コンボボックスに値を表示するにはどうすればいいですか?
:
<TextBox x:Name="txtCameraName"/>
<ComboBox x:Name="cmbCameraType" SelectedValuePath="Camera_Type" IsEditable="True" IsReadOnly="True" Text="Please select...">
<ComboBoxItem>IP</ComboBoxItem>
<ComboBoxItem>webcam</ComboBoxItem>
<ComboBoxItem>analogue</ComboBoxItem>
</ComboBox>
<DataGrid x:Name="mydgv" SelectionChanged="dgvAddPersonTab_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Camera_Name}" Width="80" />
<DataGridTextColumn Binding="{Binding Camera_Type}" Width="80" />
</DataGrid.Columns>
私はmytblという名前のテーブルのすべてのフィールドを取得し、このコードのデータグリッドでそれらを示しています。
private void window_Loaded(object sender, RoutedEventArgs e)
{
var q= from j in CamDB.mytbl select q;
mydgv.ItemsSource = q.ToList();
}
とmytbl
はテーブルです2つのフィールド:Camera_Name
,Camera_Type
があります。今度は、テキストボックスにCamera_Name
の値を表示し、DataGridの行を選択すると、コンボでCamera_Type
という値を表示します。私はthis linkを読んで、次のコードで試してみましたが、コンボについてはうまくいかず、テキストボックスについてはうまくいきました。
private void mydgv_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var AllFields = mydgv.SelectedItem;
txtCameraName.Text = AllFields.GetType().GetProperty("Camera_Name").GetValue(AllFields, null).ToString();
cmbCameraType.SelectedValue = AllFields.GetType().GetProperty("Camera_Type").GetValue(AllFields, null);
}
これは、バインディングを使用するxamlでもっと簡単に行うことができます。私の答えをチェックしてください。 – GregaMohorko