私は単純な検索テキストボックスを持っています。このテキストボックスはフィルターとして機能します。私は今5回目のコードをコピー/ペーストしていて、十分です。カスタムコントロールの時間。WPF - <T>をdependencyPropertyとして使用することができます
左右のブラケットはシンプルになります()
マイカスタムコントロールに置き換えられました。私の問題は、List(T)型のこのコントロールにdependencyPropertyを持たせたいということです。
私はそれを実証するためのテストプロジェクトを作成し、それが動作することを確認しました。それはうまくいく。リストを無視する。
以下はクラス全体です。問題は、私を保持しているのはList(Person)をList(T)に置き換えることだけです。何かリストのようなものです:Tはオブジェクトです
typeof(List(T)ここで:Tは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;
}
}
これは私の問題を解決しますか?実際の不動産をどのように宣言しますか? Public IList <> FilterSourceを宣言することはできません。コンパイラエラー。 IListに含まれていないものを定義する必要がありますか? – tronious
@ user1631520: 'IList 'です。 – SLaks
コンパイラが「Generic type 'System.Collections.Generic.IListを使用すると」には1つの引数が必要ですpublic static readonly DependencyProperty SourceProperty = DependencyProperty.Register( "FilterSource"、typeof(IList <>)、typeof (SearchTextBox)、新しいUIPropertyMetadata(NULL)); 公共のIList FilterSource –
tronious