我有一個項目列表框和一個搜索文本框和搜索按鈕,我想在文本框中輸入搜索文本並單擊搜索按鈕,以便列表框突出顯示該項目並獲取它在屏幕上(用於冗長的列表)。 使用ICollectionView可以做到這一點嗎?如果不可能的話如何實現這個場景。 注意:谷歌搜索後,我發現所有關於過濾的示例,但我需要搜索。 感謝您與我們聯繫。WPF-MVVM:使用ICollectionView搜索列表框
回答
您可以通過實現一個棱鏡行爲實現這一目標:
public class AutoScrollingBehavior:Behavior<ListBox>
{
protected override void OnAttached()
{
base.OnAttached();
var itemsSource = AssociatedObject.ItemsSource as ICollectionView;
if (itemsSource == null)
return;
itemsSource.CurrentChanged += ItemsSourceCurrentChanged;
}
void ItemsSourceCurrentChanged(object sender, EventArgs e)
{
AssociatedObject.ScrollIntoView(((ICollectionView)sender).CurrentItem);
AssociatedObject.Focus();
}
}
另一種方法是聽ListBox.SelectionChanged而不是ICollectionView.CurrentChanged。
public class AutoScrollingBehavior:Behavior<ListBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionChanged += AssociatedObjectSelectionChanged;
}
void AssociatedObjectSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0)
return;
AssociatedObject.ScrollIntoView(e.AddedItems[0]);
AssociatedObject.Focus();
}
}
在XAML中:
<ScrollViewer Height="200">
<ListBox x:Name="listbox" ItemsSource="{Binding Path=NamesView}" SelectionMode="Single"
IsSynchronizedWithCurrentItem="True">
<i:Interaction.Behaviors>
<local:AutoScrollingBehavior/>
</i:Interaction.Behaviors>
</ListBox>
</ScrollViewer>
內搜索命令,設置NamesView.MoveCurrentTo(foundItem)
。然而,這種方法只會滾動到邊緣,而不是中心,你可能會期望。如果您希望它滾動到中心,則可能需要ItemContainerGenerator
。
在誰擁有的ICollectionView的您的視圖模型:
private string _searchText;
public string SearchText
{
get { return _searchText; }
set
{
_searchText = value;
RaisePropertyChanged("SearchText");
}
}
private ICommand _searchCommand;
public ICommand SearchCommand
{
get { return _searchCommand ?? (_searchCommand = new DelegateCommand(Search)); }
}
private void Search()
{
var item = _names.FirstOrDefault(name => name == SearchText);
if (item == null) return;
NamesView.MoveCurrentTo(item);
}
在XAML中,綁定TextBox.Text到SEARCHTEXT並結合搜索按鈕的命令來SearchCommand。
希望它可以幫助。
它是C:\ Program Files文件(x86)\ Microsoft SDKs \ Expression \ Blend \ .NETFramework \ v4.0 \ Libraries \ System.Windows.Interactivity.dll。我編輯答案向你展示如何綁定文本。 –
var item = _names.FirstOrDefault(name => name == SearchText); 項目始終爲空,並且對於(name => name == SearchText)LHS是一個對象,RHS是一個字符串 – Hussein
這只是一個示例,可告訴您解決問題的方式。在現實世界中它可能要複雜得多。例如,LHS是一個對象,那麼你應該怎麼做?遵循業務邏輯。如果你正在尋找他的名字,那麼使用_persons.FirstOrDefault(person => person.Firstname == SearchText)等等。 –
- 1. 使用backgroundWorker在列表框中搜索
- 2. 列表框搜索功能
- 3. NotImplementedException搜索列表框
- 4. C#搜索列表框
- 5. 用wpf在列表框中搜索
- 6. vb2008通過使用文本框的列表框搜索
- 7. 使用ICollectionView
- 8. 使用一個搜索框搜索多個數據庫列
- 9. 使用Android搜索對話框搜索多個數據庫列
- 10. PHP使用多個文本框搜索多列的MySQL搜索
- 11. 搜索列表
- 12. 如何在列表框中搜索?
- 13. MFC組合框,搜索字體列表
- 14. 搜索面板列表框選擇 -
- 15. 搜索根據列表框選擇
- 16. 通過HABTM複選框/列表搜索
- 17. 如何使用LWUIT顯示對話框與搜索列表?
- 18. 使用Android中的搜索框創建多選列表視圖
- 19. 如何使用文本框搜索並提供建議列表?
- 20. 使用大寫和小寫在列表框中搜索項目
- 21. c# - 使用文本框搜索列表視圖項目
- 22. 使用快速搜索框即時搜索Android搜索
- 23. 搜索列表的列表?
- 24. 如何使用搜索框
- 25. 如何使用android搜索搜索數組列表?
- 26. 使用二進制搜索(C#)搜索分類列表
- 27. 使用BaseAdapter的ListView搜索功能不填充搜索列表
- 28. PHP:使用下拉列表搜索
- 29. 使用ThreadPools搜索對象列表
- 30. SQL - SSRS搜索值列表使用LIKE
是的,這是可能的,並過濾收集視圖是一個首選的解決方案。雖然它說'過濾',但您可以用'搜索和選擇'來代替它。 –
@GarryVass我知道如何使用ICollectionView進行過濾以便搜索和突出顯示所需項目的步驟 – Hussein
突出顯示在視覺方面,其實現可以使用ICollectionView,但視覺效果需要模板或其他實現。兩種不同的動物類型的東西。 –