C# 在ListViewItem中查找控件

C# 在ListViewItem中查找控件,c#,wpf,xaml,C#,Wpf,Xaml,我有一个列表视图显示一个主要包含两个属性的项目列表 理想情况下,这些属性中的每一个都应该从两个组合框中选择 此外,第二个组合框中可用的选项取决于第一个组合框 下面是我使用的代码的想法: <ListView> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <ComboBox Name="combo1"

我有一个
列表视图
显示一个主要包含两个属性的项目列表

理想情况下,这些属性中的每一个都应该从两个组合框中选择

此外,第二个组合框中可用的选项取决于第一个组合框

下面是我使用的代码的想法:

<ListView>
   <ListView.ItemTemplate>
       <DataTemplate>
          <StackPanel>
              <ComboBox Name="combo1"
                        ItemsSource="{DynamicResource combo1Source}"
                        SelectedItem="{Binding FirstProperty}"
                        SelectionChanged="combo_SelectionChanged">
              <ComboBox Name="combo2"
                        ItemsSource="{DynamicResource combo2Source}"
                        SelectedItem="{Binding SecondProperty}">
          </StackPanel>
       <DataTemplate>
   <ListView.ItemTemplate>
</ListView>

问题是,我不知道如何从
combo\u SelectionChanged
(在C中)中获取对
combo2
的引用


您能告诉我如何继续吗?

可以在这里查看我的问题和不同的回答,以及我为特定项目找到的解决方案:

希望这有帮助


注意。

您不应该有对combo2的引用,但应该更新集合combo2Source,该集合绑定为combo2的ItemsSource

因此,在combo_SelectionChanged中,您只需将combo1的实际选择的可能值加载到combo2Source集合

编辑:要防止所有项目都是相同的,请执行以下操作:

添加一个ValueConverter,为selectedItem选择相应的可能值集合:

<ComboBox ItemsSource="{Binding ElementName=Combo1, Path=SelectedItem, Converter={StaticResource SubSelectionConverter}}" />

ValueConverter示例:

private Dictionary<Object, List<Object>> _PossibleValues;
public object Convert(Object data, ....)
{
   if(PossibleValues.ContainsKey(data))
   {
      //return the possible values for the actual selected parent item
      return(PossibleValues(data));
   }
   return null;
}
private Dictionary\u-PossibleValues;
公共对象转换(对象数据,…)
{
if(可能的值.ContainsKey(数据))
{
//返回实际选定父项的可能值
返回(可能值(数据));
}
返回null;
}

最简单的方法是在
组合1
中添加一个
标记:

 <ComboBox Name="combo1" Tag="{x:Reference combo2}" ... />


或者,您可以从
Parent
属性获取
StackPanel
,只需获取
(组合框)子项[1]
。如果模板的结构发生变化,我不会这样做。

您不能在codebehind中简单地引用combo2吗?我不能,因为在
列表视图中每行有一个实例具有此名称,您不能,因为它会更新每个项目的
combo2
的源代码。
var combo2 = (sender as FrameworkElement).Tag as ComboBox;