通过Listview中的DataContext从行对象获取值

时间:2013-06-17 17:09:53

标签: c# wpf listview datacontext

我有一个使用DataTemplates从XML文件填充的列表视图。在每一行上都会生成一个按钮。当您单击按钮时,我想对该行上的值执行某些操作。到目前为止一切都很好。

我实际上正在使用此帖子的第三个答案here

此解决方案的实际代码(含有神秘评论)是:

    private void btnMoveFDAup(object sender, RoutedEventArgs e)
{
    Button btn = ((Button)sender);
    // btn.DataContext will get you to the row object where you can retrieve the ID
}

当我在调试器的Watch Window中查看btn.DataContext时,我看到了我需要的所有精彩数据: Watch window output http://gilgameshcontrite.com/images/Debug.jpg

问题是:我如何访问这些数据?我需要输入'姓名'和几个布尔;但我完全无能为力。

各种尝试,如

string name = btn.DataContext.Name;

抛出编译器错误。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您需要将btn.DataContext投射到LVData

var lvData = (LVData)btn.DataContext;
// now you can access lvData.Name, ...

您收到编译错误,因为btn.DataContext属于object类型,并且对LVData成员一无所知。在运行时,它可以指向任何类实例(因为所有类都继承自object)。您告诉编译器btn.DataContext通过强制转换为LVData实例。

(此处有更多解释:polymorphismcasting。您将始终需要这些。)