Сначала код (извините, если не на 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;
}
}
Спасибо, что прочитали до сих пор, как вы уже поняли бы, это то, что код фильтрует список на основе ввода в текстовом поле, который работает как шарм, кстати.
Моя проблема в том, как сохранить выделение во время фильтрации. Когда окно загружается, в списке есть все элементы, и я выбираю первый элемент, затем я набираю что-то в текстовом поле, и фильтры списка выбираются только для отображения соответствующих элементов, после выбора другого элемента я удаляю весь текст из текста. поле, которое возвращает его в исходное состояние, но на этот раз выбор изменился только на элемент, который я выбрал в отфильтрованном виде (поэтому вместо двух элементов, отображаемых как выбранные, только один отображается как выбранный). Это поведение очевидно, так как я фильтрую коллекцию, поэтому в тот момент, когда коллекция меняет выбор, он теряется.
Есть ли способ сохранить выбор? какие-нибудь указатели?
Большое спасибо.