最初にコード(100%ではない場合は申し訳ありません)私は専門家ではありません。次に質問が続きます。
public partial class Window1 : Window
{
CollectionView cv;
public Window1()
{
InitializeComponent();
List<Person> ppl = new List<Person>();
BitmapImage b = new BitmapImage(new Uri(@"http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png",UriKind.Absolute));
ppl.Add(new Person(b, "world1"));
ppl.Add(new Person(b, "world2"));
ppl.Add(new Person(b, "world3"));
ppl.Add(new Person(b, "world4"));
ppl.Add(new Person(b, "world5"));
ppl.Add(new Person(b, "world6"));
lb.ItemsSource = ppl;
lb.SelectedIndex = 1;
cv = (CollectionView)CollectionViewSource.GetDefaultView(lb.ItemsSource);
new TextSearchFilter(cv, textBox1);
}
}
public class TextSearchFilter
{
public TextSearchFilter(CollectionView cv, TextBox tb)
{
string filterText = "";
cv.Filter = delegate(object obj)
{
Person p = obj as Person;
int index = p.Info.IndexOf(filterText,0,StringComparison.InvariantCultureIgnoreCase);
return index > -1;
};
tb.TextChanged += delegate
{
filterText = tb.Text;
cv.Refresh();
};
}
}
class Person
{
private BitmapImage myImage;
private string myInfo = "";
public BitmapImage Image
{
get { return myImage; }
set { myImage = value; }
}
public string Info
{
get { return myInfo; }
set { myInfo = value; }
}
public Person(BitmapImage Image, string Info)
{
this.Image = Image;
this.Info = Info;
}
}
ここまで読んでくれてありがとう。コードがテキストボックスの入力に基づいてリストボックスをフィルター処理することは理解できたでしょうが、これは魔法のように機能します。
私の問題は、フィルタリング中に選択を保持する方法です。ウィンドウが読み込まれると、リストボックスにすべてのアイテムが含まれ、最初のアイテムを選択します。次に、テキストボックスに何かを入力し、リストボックスフィルターで関連するアイテムのみを表示します。別のアイテムを選択した後、テキストからすべてのテキストを削除します元の状態に戻すボックスですが、今回はフィルター ビューで選択したアイテムのみに選択が変更されました (したがって、2 つのアイテムが選択されていると表示されるのではなく、1 つだけが選択されていると表示されます)。コレクションをフィルタリングしているので、この動作は明らかであるため、コレクションが変更された瞬間に選択が失われます。
選択を保持する方法はありますか?ポインタはありますか?
どうもありがとう。