0
WPF를 실험하고 예상치 못한 일부 필터링 동작이 발생했습니다. ICollectionView 필터가 소스에 영향을줍니다.
나는 이름, 자, 그리고 숫자 순서와 미국 대통령,에 대한 정보를 표시 ListView를 및 데이터 그리드, 간단한 윈도우 제어를 만들었습니다.응용 프로그램은 여러 대통령과 ObservableCollection에를 인스턴스화합니다. Main에서는 ObservableCollection에서 뷰를 만들고 필터링 및 정렬을 적용합니다. ListView는이 뷰에 바인딩되고 DataGrid는 원래 ObservableCollection에 바인딩됩니다.
나는 필터링 결과 및 목록의 모든 항목을 표시하는 데이터 그리드를 표시 목록보기 예상했다. 그러나 DataGrid는 필터링 된 결과도 표시합니다. 누구든지 이것에 대한 설명이 있습니까? 소스 컬렉션 (presidents
)를 표시 할 때 어떤
ItemsControl
합니다 (
DataGrid
)에 사용될 -
public partial class MainWindow : Window
{
ICollectionView presidentView;
ObservableCollection<President> presidents = new ObservableCollection<President>
{
new President{Name = "Barack Obama", Party="Democratic", Order=44},
new President {Name = "George W Bush", Party="Republican", Order=43},
new President{Name = "Bill Clinton", Party="Democratic", Order=42},
new President {Name="George Bush", Party="Republican", Order=41},
new President{Name="Ronald Reagan", Party="Republican", Order=40},
new President{Name="Jimmy Carter", Party="Democratic", Order=39},
new President{Name="Gerald Ford", Party="Republican", Order=38},
new President{Name="Richard Nixon", Party="Republican", Order=37},
new President{Name="Lyndon Johnson", Party="Democratic", Order=36}
};
public MainWindow()
{
InitializeComponent();
presidentView = CollectionViewSource.GetDefaultView(presidents);
presidentView.SortDescriptions.Add(new SortDescription("Order", ListSortDirection.Ascending));
Predicate<object> isRepublican = (x) =>
{
President p = x as President;
return p.Party == "Republican";
};
presidentView.Filter = isRepublican;
list.ItemsSource = presidentView;
grid.ItemsSource = presidents;
}
}
public class President
{
public int Order { set; get; }
public string Name { set; get; }
public string Party { set; get; }
}
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="727.416">
<Grid>
<ListView HorizontalAlignment="Left" Height="260" Margin="10,10,0,0" Name="list" VerticalAlignment="Top" Width="197">
<ListView.ItemTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=Name}">
</TextBlock>
</ItemContainerTemplate>
</ListView.ItemTemplate>
</ListView>
<DataGrid Name="grid" HorizontalAlignment="Left" Margin="224,13,0,0" VerticalAlignment="Top" Height="257" Width="487"/>
</Grid>
</Window>
그것은 속담 마법처럼 일했다. 감사. – akmartzke