【问题标题】:c# wpf access value in column of listviewc# wpf 访问listview列中的值
【发布时间】:2011-01-06 20:19:08
【问题描述】:

我有一个绑定到 XML 的 ListView。 XAML 如下所示:

<ListView Name="patientsListView" ItemsSource="{Binding}" SelectionChanged="patientsListView_SelectionChanged">
    <ListView.View>
        <GridView x:Name="patientGrid">
            <GridViewColumn Header="PatientName" Width="Auto" DisplayMemberBinding="{Binding XPath=PatientName}" />
            <GridViewColumn Header="PatientAccountNumber" Width="Auto" DisplayMemberBinding="{Binding XPath=PatientAccountNumber}" />
            <GridViewColumn Header="DateOfBirth" Width="Auto" DisplayMemberBinding="{Binding XPath=DateOfBirth}" />
        </GridView>
    </ListView.View>
</ListView>

当点击一行时,我想做一些事情:

private void patientsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
        //do stuff
        MessageBox.Show();
        }

如果我单击一行,如何单独访问列中的值?调试时,我可以在 Listview SelectedItems 的 Locals 中看到我的数据在 Results View 的 InnerText 中的任何索引,但我不知道如何在代码中获取值。

【问题讨论】:

    标签: c# wpf xml


    【解决方案1】:
    var patient = ((ListViewItem) sender).Content as Patient; //or whatever object type
    

    从那里你可以得到patient.PatientName

    [编辑] 现在我看了一下,我不能 100% 确定这将在 selectionchanged 事件中起作用。但它适用于行点击事件。

    但是,如果您只是想更新 UI 的另一部分,您可以执行以下操作:

    <TextBlock Text="{Binding SelectedItem.PatientName,ElementName='patientGrid'}"/>
    

    【讨论】:

    • 谢谢!不完全是我正在寻找的答案,但您的最终评论引发了更新我的 UI 的想法......我不得不将 IsSynchronizedWithCurrentItem="True" 添加到我的 ListView。
    • @CraigV 很高兴我能帮上一点忙 :)
    【解决方案2】:

    在 Debug 模式下找出 listview.SelectedItems 的类型,然后将其转换为该类型

    var item = (ItemType)listview.SelectedItems
    

    你可以像这样获得你想要的价值

    item.PatientName
    

    【讨论】:

      【解决方案3】:

      您可以将senderobject 更改为dynamic,并继续将dynamic 用于其他列。

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 2010-09-10
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多