【问题标题】:How to get Key of selected Observable Collection?如何获取所选 Observable Collection 的 Key?
【发布时间】:2016-01-25 09:07:54
【问题描述】:

我有一个带有 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>

【问题讨论】:

  • 不记得我的头顶,但尝试使用 WPF 检查器。它将帮助您寻找这样的解决方案。
  • 您希望密钥在视图模型中还是在视图中可用?

标签: c# wpf data-binding observablecollection


【解决方案1】:

假设您的 Items 收藏是这样的:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多