我有一个简单的搜索文本框。此文本框用作过滤器。我现在已经第 5 次复制/粘贴了代码,足够了。是时候自定义控件了。
左右括号已替换为 ()
我的自定义控件将很简单。我的问题是我想在这个 List(T) 类型的控件上有一个dependencyProperty。
我创建了一个测试项目来证明它并确保它可以工作。它运作良好。忽略列表。
下面是全类。问题在于,唯一阻止我的是用List(T)替换List(人)。类似于 List 的东西,其中: T 是对象
typeof(List(T) where: T is Object)
public class SearchTextBox : TextBox
{
public static readonly DependencyProperty SourceProperty =
DependencyProperty.Register("FilterSource", typeof(List<Person>), typeof(SearchTextBox), new UIPropertyMetadata(null)); //I WANT THIS TO BE LIST<T>
public List<Person> FilterSource
{
get
{
return (List<Person>)GetValue(SourceProperty);
}
set
{
SetValue(SourceProperty, value);
}
}
public static readonly DependencyProperty FilterPropertyNameProperty =
DependencyProperty.Register("FilterPropertyName", typeof(String), typeof(SearchTextBox), new UIPropertyMetadata());
public String FilterPropertyName
{
get
{
return (String)GetValue(FilterPropertyNameProperty);
}
set
{
SetValue(FilterPropertyNameProperty, value);
}
}
public SearchTextBox()
{
this.KeyUp += new System.Windows.Input.KeyEventHandler(SearchBox_KeyUp);
}
void SearchBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
ICollectionView view = CollectionViewSource.GetDefaultView(FilterSource);
view.Filter = null;
view.Filter = new Predicate<object>(FilterTheSource);
}
bool FilterTheSource(object obj)
{
if (obj == null) return false;
Type t = obj.GetType();
PropertyInfo pi = t.GetProperty(FilterPropertyName);
//object o = obj.GetType().GetProperty(FilterPropertyName);
String propertyValue = obj.GetType().GetProperty(FilterPropertyName).GetValue(obj, null).ToString().ToLower();
if (propertyValue.Contains(this.Text.ToLower()))
{
return true;
}
return false;
}
}
最佳答案
不;那是不可能的。
相反,只需使用非通用的typeof(IList)
即可。
关于WPF - 可以将 List<T> 用作依赖项属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13709562/