Datenbindung funktioniert nicht unter Windows Phone 7

Der Eine oder Andere mag sich durchaus schon gewundert haben, dass die Datenbindungen bei Betätigen der ApplicationBarIconButton-Elemente nicht ausgelöst wird und eingegeben Daten daher nicht übernommen werden. Der Hintergrund liegt darin, dass die ApplicationBar den Fokus nicht vom aktuellen Steuerelement nimmt und so der UpdateSourceTrigger nicht ausgelöst wird. Abhilfe schafft ein manuelles Aktualisieren der Bindung: private void UpdateBindings(FrameworkElement target, DependencyProperty property) { var binding = target.GetBindingExpressoin(property); binding.UpdateSource(); } Dieser Methode kann ein Element vom Typ FrameworkElement übergeben werden, als auch die DependencyProperty, für welches die Binding-Expression ausgelesen werden soll. Auf dem erhaltenen Binding wird per UpdateSource das Schreiben des geänderten Wertes in die Quelle ausgelöst. Es bleibt zu hoffen, dass sich dieses Verhalten in zukünftigen Versionen noch ändert.

ApplicationBarIconButton ist immer null

Bei der ApplicationBar handelt es sich um eine Shell-Komponente, für die lediglich ein Wrapper besteht und verwendet werden kann. Dies spiegelt sich darin wider, dass es sich nicht um ein DependencyObject handelt. Dies bringt zwei Nachteile mit sich: Datenbindungen mit der ApplicationBar und den darin verwendeten Elementen ist nicht möglich. Die Elemente befinden sich nicht im Baum der Silverlight-Elemente, wodurch auch ein Zugriff per Name auf dieselben nicht möglich ist. Um nun auf diese Elemente Zugriff zu haben (im Speziellen nun für die ApplicationBarIconButton-Elemente) muss man sich über die Eigenschaft ApplicationBar der zugehörigen PhoneApplicationPage behelfen. Das dahinter liegende Objekt enthält eine Auflistung Buttons, welche die Schaltflächen enthält. Um also beispielsweise auf die erste Schaltfläche zuzugreifen, kann folgender Code verwendet werden: ApplicationBarIconButton button = (ApplicationBar.Buttons[0] as ApplicationBarIconButton); if (button != null) button.Text = "Changed"; Dies kann nun auf alle Schaltflächen angewandt werden. Der Zugriff auf die Schaltflächen der ApplicationBar wird hauptsächlich ... (Mehr)