Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过ListBoxItem的数据绑定类访问按钮/标签?_C#_Wpf_Button_Listbox_Listboxitem - Fatal编程技术网

C# 如何通过ListBoxItem的数据绑定类访问按钮/标签?

C# 如何通过ListBoxItem的数据绑定类访问按钮/标签?,c#,wpf,button,listbox,listboxitem,C#,Wpf,Button,Listbox,Listboxitem,我当前有一个绑定到listboxitem的类对象。以前,我通过单击按钮并访问其父对象来获取ListBoxItem中的其他对象,但现在我需要收集对象,而无需单击按钮或标签,只需按其类 我试图收集ListBoxItem及其索引和类绑定,但它们都给了我一个空值: 错误: Output: Exception thrown: 'System.InvalidOperationException' in WindowsBase.dll 默认情况下,列表框是虚拟化的,请参阅 通常,您不必同时显示所有项目;而是

我当前有一个绑定到listboxitem的类对象。以前,我通过单击按钮并访问其父对象来获取ListBoxItem中的其他对象,但现在我需要收集对象,而无需单击按钮或标签,只需按其类

我试图收集ListBoxItem及其索引和类绑定,但它们都给了我一个空值:

错误:

Output: Exception thrown: 'System.InvalidOperationException' in WindowsBase.dll
默认情况下,列表框是虚拟化的,请参阅

通常,您不必同时显示所有项目;而是显示一个子集,用户在列表中滚动。在这种情况下,使用UI虚拟化是有意义的,这意味着项目的项目容器生成和相关布局计算将推迟到项目可见为止

换句话说,您将得到null,因为所讨论的ListBoxItem尚未可见和实现。唯一可靠的解决方法是禁用虚拟化以强制实例化所有项。尽管您可以访问每个项目,但这可能会导致大型集合的性能不佳,因为加载列表框时会加载所有项目,并且所有项目都保存在内存中,这会增加内存占用

<ListBox x:Name="listBox" VirtualizingStackPanel.IsVirtualizing="False">
访问子控件,例如使用FindName按名称访问数据模板中的子控件。。。在类似ListBox的ItemsControl中不起作用。您必须遍历可视化树才能获取控件,请参见:

. 通常,直接在items控件中处理控件不是一个好主意。使用数据绑定要容易得多,因为您不直接访问容器和虚拟化,所以不会出现任何容器和虚拟化问题。此外,您的代码将被简化,并且您不需要采用可视化结构

有关此主题的更多信息和示例,请参阅:


为了找到另一个解决方案/想法,我提出了可以添加到类中的INotifyPropertyChanged,因此无需从列表框中删除ItemsSource,只需在程序加载时挂接items源,然后就可以更改集合中的数据

我使用了这里的代码:


我不需要访问文本块,只需要将一些绑定连接到对象,并且可以从更改类的值开始进行UI更改。

您知道可以为列表框绑定选定项,从而删除所有这些代码。一个更紧迫的问题是,为什么不使用绑定?向我们展示您的xaml,我们可以提供更多帮助。我认为您在转换过程中的某些地方是错误的。使用Label delay=lbi.findnamelbaldelay作为标签@meysamasadi是一个文本块。我将为任何人添加更多信息。如果您可以导入ClassBinding类内容,可能会发现一个bug。
Output: Exception thrown: 'System.InvalidOperationException' in WindowsBase.dll
<ListBox x:Name="listBox" VirtualizingStackPanel.IsVirtualizing="False">