모니터링 용 동적 탭을 설정하고 INotifyPropertyChanged 인 여러 "ID"개체를 호스트하는 프로젝트가 있으며 더미 응용 프로그램에서 개별적으로 테스트합니다. 그러나, 바인딩에서 제대로 작동하는 응용 프로그램에서 작동하도록 할 수 없습니다. 설정되어 있습니다. 즉 :양방향 바인딩이 작동하지 않을 수 있습니다.
(Configuration.Identities is an ObservableCollection<Identity>)
foreach (Identity id in Configuration.Identities)
{
workTab = new TabItem();
workSettingsTab = new SettingsTabItem();
workTab.DataContext = id;
Binding workTabHeaderBinding = new Binding("Username");
workTabHeaderBinding.Converter = new ToLowerConverter();
workTab.SetBinding(TabItem.HeaderProperty, workTabHeaderBinding);
workSettingsTab.DataContext = id;
Binding workSettingsTabHeaderBinding = new Binding("Username");
workSettingsTabHeaderBinding.Converter = new ToUpperConverter();
workSettingsTab.SetBinding(TabItem.HeaderProperty, workSettingsTabHeaderBinding);
위의 내용은 일방적 인 방식이므로 잘 작동합니다. 위의 컨트롤에서의 DataContext에서 참조 신원 객체가 실제로 변경된 값을 포함 않습니다, 내 저장 루틴을 디버깅 할 때 내가 발견
workSettingsTab.txtUsername.DataContext = id;
Binding usernameBinding = new Binding("Username");
usernameBinding.Mode = BindingMode.TwoWay;
workSettingsTab.txtUsername.SetBinding(TextBox.TextProperty, usernameBinding);
Binding getJournals = new Binding("LoadJournals");
scrapeJournals.Mode = BindingMode.TwoWay;
workSettingsTab.chkScrapeJournals.DataContext = id;
workSettingsTab.chkScrapeJournals.SetBinding(CheckBox.IsCheckedProperty, scrapeJournals);
하지만 내가 사용하는 ObservableCollection에있는 하나 그러나이 두 단지 하나의 방식으로 작동 위 foreach에서 업데이트되지 않습니다. 따라서 어떻게 든 Identity 객체는 foreach 중에 DataContext 속성을 설정하는 데 처음 사용 된 객체에서 복사됩니다. 여기서 내가 뭘 잘못하고 있니?
[데이터 템플릿] (http://msdn.microsoft.com/en-us/library/ms742521.aspx)을주의 깊게 살펴 봐야하며, 그 코드는 모두 불필요합니다. –
그리고'UserName' 속성의 setter에서'PropertyChanged ("UserName")'을 제기하고 있습니까? – McGarnagle
예, NotifyPropertyChanged ("사용자 이름");이 실행됩니다. 이상한 부분은 DataContext 속성 내부의 객체가 변경되었지만 어떤 이유로 원본이 변경되지 않는다는 것입니다. 나는 또한 템플릿이없는 이유 인 하나 이상의 객체에 바인딩합니다. 속성을 단일 래퍼/뷰 모델 클래스와 템플릿으로 통합하는 것이 가장 좋을까요? : P – Daniel