2013-10-01 36 views
1

我可以知道,如何執行搜索此默認DataGrid?雖然在它上面添加了值。如何在數據網格上執行文本搜索?

<DataGrid Name="table" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" IsTextSearchEnabled="True" Background="White"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Timestamp" Binding="{Binding StartDate}" SortDirection="Descending" SortMemberPath="StartDate" IsReadOnly="True" /> 
     <DataGridTextColumn Header="Title" Binding="{Binding Title}" IsReadOnly="True" /> 
     <DataGridTextColumn Header="Description" Binding="{Binding Description}" IsReadOnly="True" /> 
     <DataGridTextColumn Header="Type" Binding="{Binding Tag}" IsReadOnly="True" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

someyhing這樣調用刷新() http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/08/27/wpf-datagrid-search-and-highlight.aspx – Rohit

回答

2

如何創建和使用的CollectionView

下面的示例演示如何創建一個集合視圖,並將其綁定到ListBox 在你可以用數據網格

用同樣的方式
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ListBox ItemsSource={Binding Customers} /> 
</Window> 

public class CustomerView 
{ 
    public CustomerView() 
    { 
     DataContext = new CustomerViewModel(); 
    } 
} 


public class CustomerViewModel 
{ 
    private ICollectionView _customerView; 

    public ICollectionView Customers 
    { 
     get { return _customerView; } 
    } 

    public CustomerViewModel() 
    { 
     IList<Customer> customers = GetCustomers(); 
     _customerView = CollectionViewSource.GetDefaultView(customers); 
    } 
} 

過濾

要過濾集合視圖,您可以定義一個回調方法來確定項目是否應該成爲視圖的一部分。該方法應具有以下簽名:bool Filter(對象項)。現在將該方法的委託設置爲CollectionView的Filter屬性,然後就完成了。

ICollectionView _customerView = CollectionViewSource.GetDefaultView(customers); 
_customerView.Filter = CustomerFilter 

private bool CustomerFilter(object item) 
{ 
    Customer customer = item as Customer; 
    return customer.Name.Contains(_filterString); 
} 

刷新過濾

如果更改過濾條件,要刷新視圖,您必須對集合視圖

public string FilterString 
{ 
    get { return _filterString; } 
    set 
    { 
     _filterString = value; 
     NotifyPropertyChanged("FilterString"); 
     _customerView.Refresh(); 
    } 
}