Я хочу сделать ComboBox
привязан к моим данным, используя фильтр . Для этого я создал TextBox
и ComboBox
. В коде позади я читаю файл и генерирую объекты класса Channel, которые хранятся как элементы ComboBox
. Хотя компилятор не вызывает ошибок, фильтрация не работает должным образом. Если я напишу что-то, данные исчезнут, если я стираю, он вернулся. После попытки и попытки я понял, что если бы я начал набирать «myNamespace.myChannel» (Unico.Canal), данные остались, но не фильтруются. Странное поведение. Я подозреваю, что поставил что-то в неправильном месте.Фильтр CollectionViewSource
(для лучшего понимания я перевел код, канал = канал)
Вот схема моего кода:
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}"
EDIT: Я думаю, что знаю, где проблема: я не задаю свойство фильтровать. Я имею в виду, что вы видите в ComboBox свойство channelName
class Channel
, перечисленное в myListChannels. Когда я устанавливаю фильтр, не должен ли я знать, что я фильтрую? Как я мог написать это? Большое спасибо.
Вы мой герой. – Sturm