2009-09-01 5 views
0

J'ai un TextBlock qui ressemble à ceci:Silverlight Bind à TextBlock de RIA Services

<TextBlock Text="{Binding Name}" /> 

C'est à l'intérieur d'un <Canvas> avec le DataContext mis à MyClient qui est dans le ViewModel:

public Client MyClient { get; private set; } // This is a RIA Entity, hence supports INotifyPropertyChanged 

public ViewModel() { 
    MyClient = new Client(); 
    LoadOperation<Client> loadClient = RiaContext.Load<Client>(RiaContext.GetClientsQuery()); 
    loadClient.Completed += new EventHandler(loadClient_Completed); 
} 

void loadClient_Completed(object sender, EventArgs e) { 
    MyClient = DB.Clients.Single(); 
} 

La définition de MyClient comme ci-dessus ne déclenche pas l'événement PropertyChanged. En tant que tel, l'interface utilisateur n'est jamais mise à jour.

Répondre

0

Voici ce que j'ai fini par faire. J'ai ajouté un événement qui est déclenché lorsque le rappel RIA est terminé. J'attache ensuite un gestionnaire à ceci dans la vue qui définit le DataContext au ViewModel. Ainsi, il attend jusqu'à ce que ViewModel ait saisi les données, puis il définit DataContext sur ViewModel, obtenant ainsi les données correctes.

0

Vous devez définir la liaison OneWay ou TwoWay.

<TextBlock Text="{Binding Name, Mode=OneWay}" /> 
<TextBlock Text="{Binding Name, Mode=TwoWay}" /> 

Par défaut, je crois que la liaison fait OneTime.

0

L'interface utilisateur ne se met jamais à jour car vous remplacez l'objet auquel l'interface utilisateur est attachée. Le remplacement a lieu sur la méthode loadClient_completed.

Questions connexes