访问值的多列列表框

时间:2012-06-28 20:51:54

标签: c# wpf listbox

  

可能重复:
  WPF Listview Access to SelectedItem and subitems

我有一个listview定义如下:

<ListView Height="234.522" Name="chartListView" Width="260" SelectionChanged="chartListView_SelectionChanged" HorizontalAlignment="Left" Margin="251,38,0,38">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="op1" DisplayMemberBinding="{Binding op1}" Width="50"/>
                <GridViewColumn Header="op2" DisplayMemberBinding="{Binding op2}" Width="50"/>
                <GridViewColumn Header="op3" DisplayMemberBinding="{Binding op3}" Width="50"/>
                <GridViewColumn Header="op4" DisplayMemberBinding="{Binding op4}" Width="50"/>
                <GridViewColumn Header="op5." DisplayMemberBinding="{Binding op5}" Width="50"/>
            </GridView>
        </ListView.View>
    </ListView>

我使用以下内容添加数据:

chartListView.Items.Add(new { 
  op1 = "test1", op2 = "test2", op3 = "test3", op4 = "test4", op5 = "test5" });

如何访问其中一个选定的项目,以便查看列的值(例如op3)?以下代码显示了所有值,但我只想查看op3

MessageBox.Show(chartListView.SelectedItem.ToString());

1 个答案:

答案 0 :(得分:1)

我建议使用 MVVM模式,以便将UI与底层逻辑连接起来。

在互联网上,您将找到有关M * VVM模式 *的大量信息和资源。

核心思想是拥有一个包含数据结构和变量的 ViewModel (VM)。这些数据结构和变量是完全自治的,并且不以任何方式依赖于UI层。结构和变量从VM到UI / 查看(V)的连接位于 DataBindings 中。

所以你要做的事情(用非常短的术语)是将列表控件的ItemSource属性与一些底层数据结构连接起来(这里通常的结构是 ObservableCollection - 阅读文献以找出原因。

这是第一步。第二步可能是在 ViewModel 中添加一个object类型的变量,该变量将保存列表中当前选定的项目。要完成这项工作,您只需要将列表的 SelectedItem - 属性与此变量相连接。

从那时起,只要您在列表中选择一个项目,查看中的变量就会保留其值。

当然这很简短,而且相当粗略,但也许它让你想深入了解 MVVM模式 - 这是非常好的想法;)