Начинаем изучать C # / XAML, так что очень хорошо, возможно, не сделали это правильно.
Я пишу программу для просмотра изображений, перечисления их по имени файла и текстового поля для поиска, которое автоматически фильтрует список по мере его ввода.
Я неоднократно просматривал свой код C # и вижу, что фильтр действительно работает - и похоже, что обновление тоже срабатывает - однако я не могу визуально заставить его фильтровать или «обновлять» на экране.
C # для поля выглядит следующим образом
public MainWindow()
{
InitializeComponent();
DataContext = this;
ICollectionView collectionView = CollectionViewSource.GetDefaultView(AllImages);
new DynamicFiltering(collectionView, this.TextBoxFilter);
}
public class DynamicFiltering
{
public DynamicFiltering(ICollectionView filteredView, TextBox textBox)
{
string filterText = "";
filteredView.Filter = delegate(object item)
{
MyImages textvalue = item as MyImages;
string textvaluestring = textvalue.Name as string;
if (textvaluestring.ToUpper().Contains(filterText.ToUpper()))
return true;
else
return false;
};
textBox.TextChanged += delegate
{
filterText = textBox.Text;
filteredView.Refresh();
};
}
}
и xaml -
<TextBox x:Name="TextBoxFilter"/>
<ListBox Name="VisualList"
Template="{StaticResource StandardListBox}"
DataContext="{Binding AllImages}"
ItemsSource="{Binding}"
Width="Auto"
Grid.Row="1"/>
У меня такое чувство, что проблема в привязке списка, но я не могу выяснить истинную причину. Еще одна вещь, которая, возможно, заслуживает внимания, - это то, что я держу строку и источник изображений внутри каждого объекта в моем списке.
Любая помощь очень ценится!
EDIT:
Ниже приведен код, который я использую для заполнения AllImages, используя Environment.SpecialFolder.MyPictures в качестве примера.
публичный класс MyImages
{
public ImageSource _image;
открытая строка _name;
public MyImages(ImageSource image, string name)
{
_image = image;
_name = name;
}
public override string ToString()
{
return _name;
}
public ImageSource Image
{
get { return _image; }
}
public string Name
{
get { return _name; }
}
}
public List<MyImages> AllImages
{
get
{
List<MyImages> result = new List<MyImages>();
foreach (string filename in
System.IO.Directory.GetFiles(
Environment.GetFolderPath(
Environment.SpecialFolder.MyPictures)))
{
try
{
result.Add(
new MyImages(
new BitmapImage(
new Uri(filename)),
System.IO.Path.GetFileNameWithoutExtension(filename)));
}
catch { }
}
return result;
}
}