Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
.net 在WPF组合框中查找项_.net_Wpf_Search_User Controls - Fatal编程技术网

.net 在WPF组合框中查找项

.net 在WPF组合框中查找项,.net,wpf,search,user-controls,.net,Wpf,Search,User Controls,我知道在ASP.NET中,我可以使用 DropDownList1.Items.FindByText 在WPF中有没有类似的方法可以用于组合框 下面是一个场景 我有一个名为RestrictionFormat的表,其中包含一个名为RestrictionType的列,该类型是存储这些值的表的外键 在我正在编写的编辑器应用程序中,当用户从组合框中选择RestrictionFormat时(这很好),我将调出细节进行编辑。我使用第二个组合框来确保用户在编辑时只选择一个RestrictionType。我已经

我知道在ASP.NET中,我可以使用

DropDownList1.Items.FindByText
在WPF中有没有类似的方法可以用于组合框

下面是一个场景

我有一个名为RestrictionFormat的表,其中包含一个名为RestrictionType的列,该类型是存储这些值的表的外键

在我正在编写的编辑器应用程序中,当用户从组合框中选择RestrictionFormat时(这很好),我将调出细节进行编辑。我使用第二个组合框来确保用户在编辑时只选择一个RestrictionType。我已经有了RestrictionType表中的第二个combobox绑定属性,但是我需要更改它上所选的索引以匹配记录中指定的值


下面是一个场景

我有一个名为RestrictionFormat的表,其中包含一个名为RestrictionType的列,该类型是存储这些值的表的外键

在我正在编写的编辑器应用程序中,当用户从组合框中选择RestrictionFormat时(这很好),我将调出细节进行编辑。我使用第二个组合框来确保用户在编辑时只选择一个RestrictionType。我已经有了RestrictionType表中的第二个combobox绑定属性,但是我需要更改它上所选的索引以匹配记录中指定的值


这有意义吗?

在WPF中,可以使用FindName方法

XAML:


要按内容查找项目,您可以使用。

而不是尝试绑定SelectedIndex,为什么不将组合框中的SelectedItem绑定到记录中的值

换句话说,将组合框(或其父对象)的DataContext设置为选定的“记录”,并将组合框上的SelectedItem绑定到“记录”上的公开属性


如果您可以提供一些代码片段或额外的详细信息,以便响应更具体,并引用您在源记录和已填充的组合框中使用的变量和类型,则可能会有所帮助。

您可以使用ItemContainerGenerator吗

ItemContainerGenerator包含接受对象参数的ContainerFromItem方法。如果有对组合框包含的完整对象的引用(或重构该对象的方法),则可以使用以下方法:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

您可以通过两种方式检索组合框项:

按项目分列:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);
按索引:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

你能给出一些你到底想做什么的背景吗

您在组合框中放置了哪些对象,使用哪种方法?(是否正在设置或绑定ItemsSource属性?) 为什么需要按项目的“文本”查找项目?WPF中最常用的用法是将SelectedItem属性绑定到其他对象,以便可以使用表示检索/设置所选条目。您是否需要在列表中找到特定项目的特定要求

最糟糕的情况是,您可以使用Linq to对象对组合框绑定到的集合执行搜索


请不要将ComboBoxItem(即绑定ItemsSource时WPF在幕后为您生成的元素)与SelectedItem弄错,SelectedItem是您绑定到的集合中的实际对象。当您不习惯WPF时,这通常是WPF的大多数问题的根源。当您需要查找实际的ComboBoxItem时,很少会出现这种情况。

ComboBoxItem只是数据的一个视图。。。我认为在这种情况下进行UI驱动的开发不是一个好主意。您应该对数据源或项集合而不是UI控件本身执行搜索。否则,您可能会被绑定到将来很难维护和支持的UI部件的特定实现。
ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);
ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);