在ListView中选择Keys作为SelectedItems

时间:2014-07-03 20:16:10

标签: c# wpf listview

我有一个字典绑定到ListView并有两列。它支持多个选择和确定按钮。现在,在从listview中选择项目后,我只希望将第1列,即字典的键保存在列表列表1中。 需要帮助:)

这是后端代码: -

public partial class MainWindow : Window
{
    public List<string> list1
    {
        get;
        set;
    }

    public MainWindow()
    {
        InitializeComponent();
        Dictionary<int, string> list = new Dictionary<int, string>();
        list.Add(1, "a");
        list.Add(2, "b");

        lvUsers.ItemsSource = list;
        lvUsers.SelectedIndex = 0;

    }
public void getSelectedItem(Object sender, RoutedEventArgs e)
    {
    // Here is the part where you get the keys of selected items
    }

}

}

Xaml代码: -

<Grid>

    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <ListView Margin="10,10,10,0" Name="lvUsers" SelectionMode="Multiple" Grid.Row="0">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="column1" Width="120" DisplayMemberBinding="{Binding Key}" />
                <GridViewColumn Header="column2" Width="50" DisplayMemberBinding="{Binding Value}" />
            </GridView>
        </ListView.View>

    </ListView>
    <Button x:Name="getitem" Click="getSelectedItem" Grid.Row="1" Content="ok" />
        </Button>
    </Grid>
</Window>

3 个答案:

答案 0 :(得分:2)

这样的事情可以解决问题:

var keys =  lvUsers.SelectedItems.OfType<KeyValuePair<int, string>>().Select(x => x.Key);

答案 1 :(得分:1)

首先,您使用的是terms,而您实际上并没有这样做。

Binding中的

WPF使用{Binding}语法或Binding类。你只是基本上设置ItemsSource字典。

因为您没有遵循MVVM模式而只是在代码后面执行它。您可以使用list1

直接填充LINQ
list1 = lvUsers.SelectedItems.OfType<KeyValuePair<int,string>>().Select(x => x.Key.ToString()).ToList();

答案 2 :(得分:1)

您可以在Name属性中找到密钥:

string MyKey = MyListView.SelectedItems[0].Name;

它会给你一些类似的东西:

private void MyListView_SelectedIndexChanged(object sender, EventArgs e)
{
    if (ListView.SelectedItems.Count != 0)
    {
        string MyKey = MyListView.SelectedItems[0].Name;
        //...
    }
}