필터으로 내 데이터에 ComboBox
을 바인딩하고 싶습니다. 이를 위해 TextBox
과 ComboBox
을 만들었습니다. 뒤에있는 코드에서 파일을 읽고 클래스 채널의 객체를 생성하여 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 with :ItemsSource="{Binding view}"
편집 : 문제가있는 부분을 알고 있다고 생각합니다. 필터링 할 속성을 지정하지 않았습니다. 내 말은 ComboBox에서 볼 수있는 것은 의 channelName
속성이 myListChannels에 나열된 것입니다. 필터를 설정할 때 필터링 대상을 알려주지 않아야합니까? 나는 어떻게 이것을 쓸 수 있 었는가? 고맙습니다.
으로 렌더링됩니다. 내 영웅입니다. – Sturm