J'essaie de faire une liaison de données dans le code C# derrière plutôt que le XAML. La liaison XAML créée dans Expression Blend 2 vers mon objet CLR fonctionne correctement. Mon implémentation C# est mise à jour uniquement lorsque l'application est démarrée, après quoi les modifications ultérieures du CLR ne mettent pas à jour le contenu de mon libellé.La liaison de données C# ne se met pas à jour WPF
Voici la liaison XAML qui fonctionne. D'abord, un objet ObjectDataProvider est créé dans mon Window.Resources.
<ObjectDataProvider x:Key="PhoneServiceDS"
ObjectType="{x:Type kudu:PhoneService}" d:IsDataSource="True"/>
Et le contenu de l'étiquette de liaison:
<Label x:Name="DisplayName" Content="{Binding
Path=MyAccountService.Accounts[0].DisplayName, Mode=OneWay,
Source={StaticResource PhoneServiceDS}}"/>
Fonctionne très bien. Mais nous voulons que cette configuration soit en C# afin que nous puissions changer indépendamment le XAML (c'est-à-dire les nouveaux skins). Mon un temps de travail C# comme suit:
Binding displayNameBinding = new Binding();
displayNameBinding.Source =
PhoneService.MyAccountService.Accounts[0].DisplayName;
displayNameBinding.Mode = BindingMode.OneWay;
this.DisplayName.SetBinding(Label.ContentProperty, displayNameBinding);
C'est dans mon MainWindow après InitializeComponent();
Un aperçu pourquoi cela ne fonctionne que sur le démarrage? Ecrivez ceci à l'intérieur de l'événement Loaded au lieu du constructeur.
Je voudrais remplacer displayNameBinding.Source avec un appel à this.TryFindResource ("PhoneServiceDS") donc c'est exactement équivalent à son XAML, mais sinon j'étais sur le point de poster une solution comme ça. –
La méthode TryFindResource a fonctionné avec l'ObjectDataSource déclarée en XAML. J'ai trouvé que ODS est comme faire une instance de n'importe quel objet que je veux utiliser, ainsi la définition de ma source de liaison à PhoneService que j'ai instanciée a déjà fonctionné. Merci! – Jippers