각 관리에 대해 관리 개체 및 콤보 상자 목록을 표시하려는이 상황이 있습니다. 이 ComboBox 안에 비어있는 옵션과 함께이 관리에 속하는 직원 목록이 필요합니다. 그래서 필자는 관리를 기반으로 필터링해야합니다.ItemsControl 콤보 박스로 동적 필터링
지금까지 나는 다음과 같은 코드로 왔어요 :
<ItemsControl x:Name="listAdministrations" ItemsSource="{Binding Path=AllAdministrations}" Margin="0,0,0,6">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" >
<TextBox Content="{Binding Path=AdministrationName}" />
<StackPanel Orientation="Horizontal" Margin="14,0,0,0">
<Label>Declares under:</Label>
<ComboBox DisplayMemberPath="DisplayFullName">
<ComboBox.ItemsSource>
<CompositeCollection>
<!-- empty option -->
<model:Employee DisplayFullName="-" />
<CollectionContainer Collection="{Binding Source={StaticResource employeeCV}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
정적 자원 employeeCV이 부착 된 필터 이벤트와 CollectionViewSource이다 (참고 객체 이름이 번역되었다). 하지만 어떻게 든이 이벤트에 ItemsControl 루프의 현재 관리를 전달해야합니다. 데이터 바인딩에서 ItemsControl 내의 {Binding Path =.}로 변환됩니다. 보낸 사람 개체는 내 CollectionViewSource이지만 유용한 데이터는 제공하지 않습니다. 이 같은
뭔가 :
private void EmployeeAdministrationFilter(object sender, FilterEventArgs e)
{
Employee employee = (Employee)e.Item;
Administration administration; // how do I pass the administration to this filter?
}
Antonmarkov, 을하는 데 도움이 ...
희망 등 데이터 그리드, 목록 상자, 콤보 상자를 필터링 할 수 있습니다 이 같은 뜻 : (의사 코드) 공용 클래스 관리를 { 공공 CollectionViewSource CollectionViewSource { get; 개인 집합; } 공공 관리() { CollectionViewSource = new CollectionViewSource(); CollectionViewSource.Filter + = EmployeeAdministrationFilter; } 개인 무효 EmployeeAdministrationFilter (개체를 보낸 사람, FilterEventArgs 전자) { // 필터 물건 //이 관리 } 에게} = – Frederik
당신이 관리를 수정할 수있는 경우 예, 당신은 단지 속성을 직접 추가 할 수 있습니다. CollectionViewSource 대신 일반 CollectionView를 사용해야합니다. CollectionViewSource는 XAML에서 사용되는 태그 확장입니다. – Anton