問題の短い背景: 私はWPFアプリケーションのUI部分で作業しています。しかし、私はかなり早く自分の部分を終えたので、ListBoxフィルタリング機能を実装しようと決めました。私はこの時点で持っている何ListBoxのリアルタイムフィルタリング
:
<TextBox Style="{StaticResource WaterMarkMessageTextBoxStyle}"
x:Name="usuariosDisponiblesSearch"
Grid.Column="1" Grid.Row="1"/>
<ListBox Style="{StaticResource ListBoxTable}"
ItemContainerStyle="{StaticResource AlternatingListViewItemStyle}"
AlternationCount="2"
Grid.Column="1" Grid.Row="2"
x:Name="lbPossibleContracts"
SelectionChanged="lbPossibleContracts_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Nombre}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
のTextBoxは、検索文字列が含まれています。 ListBox - フィールドNombreによってDBから選択されたデータを反映します。
エンドポイントで - ListBoxにテキストボックス内の文字列と一致する項目のみを表示する作業フィルタが必要です。リアルタイム。
もちろん、バックコードを変更せずに行うことは不可能であると私は理解しています。
これまでのところ、フィルタ機能を実装するための私のアプローチは失敗しました。なぜなら、主に私がバックコードにどのような実装をしているのかが分からなかったからです。
これについての助けに感謝します。どんな方向でも動作します - コード全体(:)を生成したい場合 - 平等で解決された問題への良い、分かりやすい参照があれば歓迎されます。
UPDATE
[OK]を、私は主題でかなり大きな進歩を遂げています。コードはここhttp://www.wpf-tutorial.com/listview-control/listview-filtering/
をされています:
私はこの例を以下ました
public partial class ProjectAssignUsuariosView : UserControl
{
private ProjectAssignUsuariosViewModel _viewModel;
public ProjectAssignUsuariosView(Proyecto proyecto)
{
InitializeComponent();
_viewModel = new ProjectAssignUsuariosViewModel(proyecto);
//TempFilterPart
lbPossibleContractsFilter.ItemsSource = _viewModel.UsuariosLibres;
List<Usuario> items = new List<Usuario>();
filteredUsers.ItemsSource = items;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lbPossibleContractsFilter.ItemsSource);
view.Filter = UserFilter;
//Filtering part ends
}
//Filtering
private bool UserFilter(object item)
{
if (String.IsNullOrEmpty(usuariosDisponiblesSearch.Text))
return true;
else
return ((item as Usuario).Nombre.IndexOf(usuariosDisponiblesSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0);
}
private void usuariosDisponiblesSearch_TextChanged(object sender, TextChangedEventArgs e)
{
CollectionViewSource.GetDefaultView(lbPossibleContractsFilter.ItemsSource).Refresh();
}
//Filtering ends
エラーなしコンパイル中:ここ
<TextBox Style="{StaticResource WaterMarkMessageTextBoxStyle}"
x:Name="usuariosDisponiblesSearch"
Grid.Column="1" Grid.Row="1"
TextChanged="usuariosDisponiblesSearch_TextChanged" />
<ListBox Style="{StaticResource ListBoxTable}"
ItemContainerStyle="{StaticResource AlternatingListViewItemStyle}"
AlternationCount="2"
Margin="0,20,0,0"
x:Name="lbPossibleContractsFilter"
SelectionChanged="lbPossibleContracts_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Nombre}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
をして、backcodeです。しかし、実行中にTextBoxを変更すると、予期しないアプリケーションエラーがスローされます。そして、デバッガは、 "NullReferenceExceptionはユーザコードによって処理されませんでした。追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
CollectionViewSourceを使用してフィルタリングするためにSOを検索してみてください –
素晴らしいスタートアップのようなサウンドです!簡単な質問 - 後ろに何があるの?前もって感謝します! –
このサイト、stackoverflow –