Я хочу сделать ComboBox
привязанным к моим данным с помощью фильтра. Для этого я создал TextBox
и ComboBox
. В коде позади я читаю файл и генерирую объекты класса Channel, которые хранятся как элементы файла ComboBox
. Хотя компилятор не выдает ошибок, фильтрация работает неправильно. Если я что-то пишу, данные исчезают, если я стираю, они возвращаются. После попыток и попыток я понял, что если я начну вводить «myNamespace.myChannel» (Unico.Canal), данные останутся, но не фильтруются. Странное поведение, правда. Подозреваю, что что-то не так поставил.
(для лучшего понимания я перевел код Canal=Channel)
Вот схема моего кода:
namespace Unico
{
public partial class ControlesArchivo : UserControl, INotifyPropertyChanged
{
public ControlesArchivo()
{
InitializeComponent();
}
public ObservableCollection<Channel> myListChannels //with INotifyPropertyChanged implemented. But I think I don't need it.
private void loadButton_Click(object sender, RoutedEventArgs e)
{
File loadedFile = new File();
loadedFile.read(); //Generates a bunch of data in lists.
foreach (Channel mychan in loadedFile.channels) //Just duplicating the data (maybe this can be avoided)
{
myListChannels.Add(mychan);
}
var view = CollectionViewSource.GetDefaultView(this.miListaDeCanales);
view.Filter = delegate(object o)
{
if (o.ToString().Contains(myTextBox.Text)) //Delicate place
{
return true;
}
return false;
};
myComboBox.ItemsSource = view;
DataContext = this;
}
private void myTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
((ICollectionView)myComboBox.ItemsSource).Refresh();
myComboBox.SelectedIndex = 0;
}
}
}
Данные связаны в XAML с помощью:
ItemsSource="{Binding view}"
РЕДАКТИРОВАТЬ: я думаю, что знаю, в чем проблема: я не указываю свойство для фильтрации. Я имею в виду, что вы видите в ComboBox свойство channelName
из class Channel
, перечисленных в myListChannels. Когда я устанавливаю фильтр, разве я не должен сообщать, что я фильтрую? Как я мог это написать? Спасибо большое.