저는 WPF 및 바인딩으로 시작하지만 이해가되지 않는 이상한 동작이 있습니다. WPF 바인딩 질문
Exemple 1
: 하나의 콤보 상자 (이름 = C) 생성자에 다음 코드와 아주 간단한 WPF 양식 :이이 때문에 충돌 이유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가 null ...
비고 : Messagebox를 제거하면 바인딩 작업이 정상적으로 작동하며 콤보 상자에 값이 있습니다. datacontext가 설정된 후 "약간의"시간이 필요한 것과 같습니다. 하지만 바인딩이 완료 될 때를 아는 방법은 무엇입니까?
Tx 도움을 요청합니다.
지옥, 사실 그것은 선택된 항목 이상입니다. 즉 null입니다. 콤보 상자는 전혀 바인딩되지 않은 것처럼 반응합니다 (항목도 null 임). 이것은 실버 라이트에서 작동하기 때문에 호기심이 많았습니다. 3 – Fabian
네, 그걸 확인하는 것을 괴롭히지 않았습니다 : P. 이상한 것은 실버 라이트에서는 작동하지만 wpf에서는 작동하지 않습니다. 어쩌면 그들은 컨트롤을로드하는 다른 방법을 가지고 있을지도 모릅니다. 컨트롤 자체를 렌더링하기 전에 OnContentRendered 및 MyCollection이 설정되었는지 확인했습니다. 시간이별로 없지만 빨간색 게이트 .net reflector는 .net 프레임 워크에서 무슨 일이 일어나는지 살펴볼 수있는 훌륭한 도구입니다. WPF로 많은 이상한 것을 발견 할 수있게 도와주었습니다. 잘못된 답변을 드려 죄송 합니다만, MVVM을 WPF 응용 프로그램을 개발하는 데 정말 좋은 패턴으로 생각해 주시기 바랍니다. – Michael
Tx 당신 Michael, 저는 WPF에 Silverlight 3 프로젝트 형태를 옮기고 있습니다. 언뜻보기에는 꽤 쉬워 보입니다. 그러나 그들 사이의 괴상한 차이가있어 매우 복잡합니다. :) – Fabian