Я начинаю с WPF и привязки, но есть странное поведение, которое я не понимаю.WPF Binding question
Exemple 1: Очень простая форма WPF, только один выпадающий список (имя = C) и следующий код в конструкторе:
public Window1()
{
InitializeComponent();
BindingClass ToBind = new BindingClass();
ToBind.MyCollection = new List<string>() { "1", "2", "3" };
this.DataContext = ToBind;
//c is the name of a combobox with the following code :
//<ComboBox Name="c" SelectedIndex="0" ItemsSource="{Binding Path=MyCollection}" />
MessageBox.Show(this.c.SelectedItem.ToString());
}
Можете ли вы объяснить мне, почему это приведет к краху из-за этого. c.SelectedItem - NULL.
Так что, хотя ... не проблема, это потому, что в конструкторе, не давайте код в виде нагруженного события:
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BindingClass ToBind = new BindingClass();
ToBind.MyCollection = new List<string>() { "1", "2", "3" };
this.DataContext = ToBind;
MessageBox.Show(this.c.SelectedItem.ToString());
}
Такая же проблема this.c.SelectedItem равна нулю ...
Примечание. Если я удалю объект Messagebox, то работа с привязкой прекрасна, у меня есть значение в поле со списком. Это похоже на то, что после того, как задан datacontext, потребуется некоторое время. Но как узнать, когда будет выполняться привязка?
Tx вы за свою помощь.
Ад, на самом деле это даже больше, чем только выбранный, то есть null. Комбобокс реагирует так же, как если бы он не был привязан вообще (элементы также имеют значение null). Было любопытно, потому что это работает в silverlight 3 – Fabian
Да, не удосужился проверить это: P. Приятно, что он работает в silverlight, но не в wpf. Возможно, у них есть другой способ загрузки элементов управления. Я проверил OnContentRendered и MyCollection был установлен до того, как он отобразит сам элемент управления. У меня нет времени, чтобы взглянуть на него больше, но красный рефлектор .net - отличный инструмент для изучения того, что происходит в рамках .net. Помог мне найти много странных вещей с WPF. Извините за неправильный ответ, но я надеюсь, что вы посмотрите на MVVM как на очень хороший образец для разработки приложений WPF. – Michael
Tx you Michael, я перемещаю проектную форму silverlight 3 в WPF, на первый взгляд кажется, что это довольно легко, но они действительно неприятные странные различия между ними, которые делают вещь довольно сложной! :) – Fabian