【发布时间】:2014-04-19 05:28:24
【问题描述】:
我正在创建一个应用程序,允许用户使用 WPF 将一些员工详细信息添加到 EntityFramework 模型中。
到目前为止,我有一个 ListView 来表示员工姓名列表,当您选择员工姓名时,它会选择另一个 ListView 中的特定数据。我使用Predicate 和ICollectionSource 完成了这项工作。
但我现在想要实现的,是拥有一个所谓的搜索引擎。因此,当用户在 TextBox 中输入员工姓名时,它会根据在搜索框中输入的内容过滤员工姓名。
我使用This Link 作为指导,但我不太确定如何在我自己的设计中实现它;在示例中,他们使用了Resource 并使用了Array。
这是我尝试过的,使用Predicate;
private EmployeeListViewModel()
: base("")
{
EmployeeList = new ObservableCollection<EmployeeViewModel>(GetEmployees());
this._view = new ListCollectionView(this.employeeList);
}
private ListCollectionView _view;
public ICollectionView View
{
get { return this._view; }
}
private string _TextSearch;
public string TextSearch
{
get { return _TextSearch; }
set
{
_TextSearch = value;
OnPropertyChanged("TextSearch");
if (String.IsNullOrEmpty(value))
View.Filter = null;
else
View.Filter = new Predicate<object>(o => ((EmployeeViewModel)o).FirstName == value);
}
}
在我看来;
<TextBox Height="23" Name="txtSearch" VerticalAlignment="Bottom" Margin="70,0,0,183" Width="100" Grid.Row="1"
Text="{Binding TextSearch, UpdateSourceTrigger=PropertyChanged}"/>
但是似乎发生的事情是,当我输入某些内容时,它会引发此异常;
Object reference not set to an instance of an object.
所以我的问题是,我怎样才能实现它,以便它实际上使我能够像在搜索框中一样过滤名称列表?
如有任何帮助或指导如何实现这一目标,我们将不胜感激。
【问题讨论】:
-
在行上你得到这个错误?您是否尝试过一步一步地遵循您的代码,以确保所有内容都按您的预期调用?
-
好吧,因为你的例外,所以只是一些建议。你的
View是否包含元素或者它可能是空的?EmployeeList真的是employeeList的封装吗?FirstName也是一个字符串,也许你应该只为测试设置一个默认值 -
employeeList获取员工列表并绑定到Listview(在问题中简要提及)。FirstName是一个字符串,它是来自子 VM 的属性。如果有帮助,我可以发布整个 ViewModel 代码,让您更好地了解正在发生的事情。 -
那会比我创建一个测试项目更好:)
-
这是可能对您有所帮助的代码。 gist.github.com/gregorybmclub/b0a39435812f1506d7d2