c# - 通过 ListView 中的 DataContext 从行对象获取值

标签 c# wpf listview datacontext

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

我实际上正在使用此线程的第三个答案 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
}

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

问题是:我如何访问这些数据?我需要输入“名称”和几个 bool 值;但我完全不知道。

各种尝试,例如

string name = btn.DataContext.Name;

只是抛出编译器错误。

提前致谢!

最佳答案

您需要将 btn.DataContext 转换为 LVData:

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

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

(更多说明: polymorphismcasting 。您将一直需要这个。)

关于c# - 通过 ListView 中的 DataContext 从行对象获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17153067/

相关文章:

带有 ListView CHOICE_MODE_MULTIPLE 的 Android onSelectedItemListener

c# - 在 Xamarin Native Android 应用程序中显示 admob 横幅和插页式广告

c# - C# 中的 Const 函数参数

c# - 图像未绑定(bind)到资源。如何使用 Relativesource 进行绑定(bind)

没有设置宽度的 WPF RichTextBox

c# - ListBox 使用 caliburn.micro 自动调整大小不正确

android - 为什么我的 Android Listview 不滚动?

c# - WPF - ListView 滚动条不显示

c# - 如何检测显着的峰值?

c# - 为什么 c# 不会仅仅因为 xs :choice in the schema? 而在 visual studio 中使用按服务引用添加从 wsdl 创建代码