【问题标题】:Getting a value from a row object via DataContext in a Listview通过 Listview 中的 DataContext 从行对象中获取值
【发布时间】:2013-06-17 17:09:53
【问题描述】:

我有一个使用 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
}

当我在调试器的监视窗口中查看 btn.DataContext 时,我看到了我需要的所有精彩数据:

问题是:我如何访问这些数据?我需要输入“名称”和几个布尔值;但我完全一无所知。

各种尝试

string name = btn.DataContext.Name;

只是抛出编译器错误。

提前致谢!

【问题讨论】:

    标签: c# wpf listview datacontext


    【解决方案1】:

    您需要将btn.DataContext 转换为LVData

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

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

    (此处有更多解释:polymorphismcasting。您将一直需要这个。)

    【讨论】:

    • 谢谢。我认为可能需要演员阵容;但是投到什么?再次感谢!
    • 运行时类型 (LVData) 在 Type 列中可见(在监视网格中)。
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多