Этот вопрос выглядит так:
Программно привязка List к ListBox
но что касается моего примера, ответы, приведенные в этом посте, не работают для меня!
Во всяком случае, я просмотрел около 10/15 подобных сообщений, но ни один не работал
Вот мой код xaml:
<Grid>
<ListBox Name="ListBoxx"/>
</Grid>
А вот код:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<string> MyCollection = new ObservableCollection<string>();
Random random = new Random();
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += (sender, e) =>
{
MyCollection.Add(random.Next(0, 100).ToString());
};
aTimer.Interval = 500;
aTimer.Enabled = true;
Binding myBinding2 = new Binding();
myBinding2.Source = this;
myBinding2.Path = new PropertyPath("MyCollection");
ListBoxx.SetBinding(ListBox.ItemsSourceProperty, myBinding);
}
}
}
Насколько я знаю, мой класс не должен наследоваться от INotifyPropertyChanged, потому что я использую ObservableCollection.
Я не хочу использовать {Binding} в коде xaml.
Я попробовал этот код:
ListBoxx.ItemsSource = MyCollection;
это "работает", но у меня произошел сбой потока. Я знаю, что могу использовать Dispatcher, чтобы исправить это, но это не исправляет мой код. Я хочу использовать «реальную» привязку (настраиваемую), как в моем фрагменте кода.
В результате я не получил ошибку, но ListBox просто не обновляется: /
Я пытался добавить строки:
MyCollection.Add("aaa");
MyCollection.Add("bbb");
MyCollection.Add("ccc");
MyCollection.Add("ddd");
но я ничего не получаю в своем приложении, поэтому я действительно считаю, что это проблема связывания. Во всяком случае, я уверен, что мой таймер в порядке, проблема не здесь.
Я тоже пытался получить MyCollection как свойство:
private ObservableCollection<string> _MyCollection = new ObservableCollection<string>();
public ObservableCollection<string> MyCollection { get { return _MyCollection; } }
но это тоже не работает: / (без ошибок, но без обновлений)