如何获取选定的 Observable Collection 的 Key?

How to get Key of selected Observable Collection?

我有一个带有 KeyValuePair 的可观察集合。我需要获取所选项目的密钥。

 private ObservableCollection<KeyValuePair<String, Items>> _items;


 <ListView Grid.Column="0" HorizontalAlignment="Stretch" Padding="5" ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedThings, Mode=TwoWay}"  SelectedValuePath="Value" >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                            <Image Height="40" Source="Resources/Apps64.png"/>
                            <TextBlock MinWidth="120" HorizontalAlignment="Stretch" TextAlignment="Center" Text="{Binding Key, UpdateSourceTrigger=PropertyChanged}" />
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

假设您的 Items collections 是这样的:

private ObservableCollection<KeyValuePair<string,string>> _items = new ObservableCollection<KeyValuePair<string, string>>();
    public ObservableCollection<KeyValuePair<string,string>> Items
    {
        get
        {
            return _items;
        }

        set
        {
            if (_items == value)
            {
                return;
            }

            _items = value;                
        }
    }

然后要从您的视图模型中获取 SelectedItem 键,只需在您的视图模型中创建一个 KeyValuePaire 属性 并将其绑定到您的 ListViewSelectedItem

private KeyValuePair<string,string> _selectedItem  ;
    public KeyValuePair<string,string> SelectedItem
    {
        get
        {
            return _selectedItem;
        }

        set
        {
            if (_selectedItem.Equals(value))
            {
                return;
            }

            _selectedItem = value; 

        }
    }

并在 Xaml 中获取 selectedItem 的密钥,只需使用 ElementName BindingListViewSelectedItem :

 <ListView x:Name="Lv" Grid.Column="0" HorizontalAlignment="Stretch" Padding="5" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" SelectedValue="{Binding SelectedThings, Mode=TwoWay}"  SelectedValuePath="Value" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                    <Image Height="40" Source="Resources/Apps64.png"/>
                    <TextBlock MinWidth="120" HorizontalAlignment="Stretch" TextAlignment="Center" Text="{Binding ElementName=Lv,Path=SelectedItem.Key}" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>