ボタンを押したらある項目を選択する
C# - C#のWPFでListViewの内容を全て取得するためにはどうしたら良いのでしょうか?|teratail で、
lv.SelectedIndex = count;
とされていますが「ある項目」とはインデックスでは指定できないということでしょうか?
lv.SelectedItem
もありますが、値が同じでもインスタンスが別ですと選択されません。
xml
1<Window
2 x:Class="Questions275082.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 Width="800"
6 Height="450">
7 <DockPanel>
8 <StackPanel DockPanel.Dock="Top">
9 <Button Click="list_add_Click" Content="add" />
10 <Button Click="list_select_Click" Content="select" />
11 </StackPanel>
12 <Grid>
13 <Grid.ColumnDefinitions>
14 <ColumnDefinition />
15 <ColumnDefinition />
16 </Grid.ColumnDefinitions>
17
18 <ListView x:Name="lv" SelectionMode="Single">
19 <ListView.View>
20 <GridView>
21 <GridViewColumn DisplayMemberBinding="{Binding Path=[0]}" Header="hoge" />
22 <GridViewColumn DisplayMemberBinding="{Binding Path=[1]}" Header="fuga" />
23 </GridView>
24 </ListView.View>
25 </ListView>
26
27 <ListView
28 x:Name="lv2"
29 Grid.Column="1"
30 ItemsSource="{Binding Items, ElementName=lv}"
31 SelectionMode="Single">
32 <ListView.View>
33 <GridView>
34 <GridViewColumn DisplayMemberBinding="{Binding Path=[0]}" Header="hoge" />
35 <GridViewColumn DisplayMemberBinding="{Binding Path=[1]}" Header="fuga" />
36 </GridView>
37 </ListView.View>
38 </ListView>
39 </Grid>
40 </DockPanel>
41</Window>
cs
1using System.Linq;
2using System.Windows;
3
4namespace Questions275082
5{
6 public partial class MainWindow : Window
7 {
8 private int count = 0;
9
10 public MainWindow()
11 {
12 InitializeComponent();
13 }
14
15 private void list_add_Click(object sender, RoutedEventArgs e)
16 {
17 count++;
18 string count_show = count + "番目の項目";
19 lv.Items.Add(new string[] { count_show, "×" });
20 lv.SelectedIndex = count - 1; // 0始まりなので
21 lv.ScrollIntoView(lv.SelectedItem);
22 }
23
24 private void list_select_Click(object sender, RoutedEventArgs e)
25 {
26 // インデックスで指定する場合(0始まり)
27 int index = lv2.SelectedIndex;
28 lv.SelectedIndex = index;
29 lv.ScrollIntoView(lv.SelectedItem);
30
31
32 // 選択された値で指定する場合
33 //object obj = lv2.SelectedItem;
34 //lv.SelectedItem = obj;
35 //lv.ScrollIntoView(lv.SelectedItem);
36
37
38 // これはできない(インスタンスが別なので)
39 //object obj = new string[] { "1番目の項目", "×" };
40 //lv.SelectedItem = obj;
41 //lv.ScrollIntoView(lv.SelectedItem);
42
43 // やるとするとlv.Itemsから探してくる必要がある
44 //object obj = lv.Items.Cast<string[]>().FirstOrDefault(x => x[0] == "1番目の項目");
45 //lv.SelectedItem = obj;
46 //lv.ScrollIntoView(lv.SelectedItem);
47 }
48 }
49}
select
ボタンを押すと、右(lv2)で選択したものを左(lv)も選択します。