【问题标题】:How to fetch selecteditems properties from listview如何从列表视图中获取选定项属性
【发布时间】:2014-09-06 19:28:10
【问题描述】:

我创建了一个列表视图,其中项目按不同类别排序。我正在尝试让列表视图的 selectedItem 进入我的 Viewmodel 中的属性,我遵循常规方法,只需将绑定设置为 SelectedItem 属性。

但是,由于我现在实际上只是将 datacontext 设置为我的可观察集合,而不是触及 ItemsSource 属性(或者我是吗?),我相信我缺少一些花哨的 xaml 代码来使 SelectedItem 的绑定工作。希望有人遇到类似的问题。 xaml 代码,viewmodel 中声明的 2 个属性如下所示。

<UserControl.Resources>
    <CollectionViewSource x:Key="TileChangeType"                               
                  Source="{Binding TileChangeList.TileChangeListEntries}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Type" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</UserControl.Resources>
<ListView Grid.Column="0" x:Name="gridTiles" VirtualizingPanel.IsVirtualizing="False" VirtualizingPanel.IsVirtualizingWhenGrouping="False"
                      DataContext="{StaticResource TileChangeType}"
                      SelectedItem="{Binding SelectedTileChange}"
      ItemsSource="{Binding IsAsync=True}">


            <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander IsExpanded="True">
                                            <Expander.Header>
                                                <TextBlock Background="Aqua" Text="{Binding Path=Name}"/>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <DataGridRowsPresenter/>
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </ListView.GroupStyle>
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="X" DisplayMemberBinding="{Binding X}" />
                        <GridViewColumn Header="Y" DisplayMemberBinding="{Binding Y}" />
                        <GridViewColumn Header="Z" DisplayMemberBinding="{Binding Z}" />
                        <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" Width="40"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>

            </ListView>

模型“SelectedTileChange”声明如下:

    public TileChange SelectedTileChange
    {
        get;
        set;
    }

    //Class contains an Observable Collection of the TileChange class (same class as SelectedItem is binding to)
    //E.g. ObservableCollection<TileChange> tileChangeListEntries;
    public TileChangeList TileChangeList
    {
        get;
        set;
    }

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    假设用户控件的数据上下文设置为包含SelectedTileChange 属性的视图模型,您可以像这样绑定到SelectedItem 属性:

    SelectedItem="{Binding DataContext.SelectedTileChange, 
                  RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
    

    这将找到用户控件,并绑定到其数据上下文中的SelectedTileChange 属性。

    但通常您只需将ListView 直接绑定到CollectionViewSource,而不是设置其数据上下文。这样你就不需要创建这种RelativeSource 绑定:

    <ListView ItemsSource="{Binding Source={StaticResource TileChangeType}}"
              SelectedItem="{Binding SelectedTileChange}" />
    

    【讨论】:

    • 优秀的答案!您刚刚解决了 2 个问题!我从来没有设法使用相对源绑定某些东西,除了元素,因为我没有使用前缀 DataContext。 ... ,(必须设置整个元素数据上下文)。现在这有效!顺便说一句,举一个“将列表视图直接绑定到集合视图源”的例子吗?
    • @ETG87 很高兴听到它奏效了。我添加了一些代码来演示如何直接绑定到 collectionviewsource。
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多