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;