filterComboBox
を使用して、データをバインドしたいと考えています。そのために、 と を作成しました。コード ビハインドでは、ファイルを読み取り、 のアイテムとして格納されるクラス Channel のオブジェクトを生成します。コンパイラはエラーをスローしませんが、フィルタリングは正しく機能しません。何かを書き込めばデータは失われ、消せば元に戻ります。試行錯誤した後、「myNamespace.myChannel」(Unico.Canal)と入力し始めた場合、データは残っていてもフィルタリングされないことに気付きました。確かに、奇妙な行動。何かを間違った場所に置いた疑いがあります。TextBox
ComboBox
ComboBox
(理解を深めるために、コードを翻訳しました。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に表示されるのは、myListChannels にリストされているchannelName
のプロパティです。class Channel
フィルタを設定するとき、何をフィルタリングしているかを知らせてはいけませんか? どうすればこれを書くことができますか?どうもありがとうございました。