0

我有一个看起来像这样的 TextBlock:

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

这是<Canvas>在 ViewModel 中的 DataContext 设置为 MyClient 的内部:

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();
}

像上面这样设置 MyClient 不会引发 PropertyChanged 事件。因此,UI 永远不会更新。

4

3 回答 3

0

这就是我最终做的事情。我添加了一个在 RIA 回调完成时触发的事件。然后我在视图中附加一个处理程序,它将 DataContext 设置为 ViewModel。如此有效,它一直等到 ViewModel 抓取数据,然后将 DataContext 设置为 ViewModel - 从而获得正确的数据。

于 2009-09-01T09:46:49.500 回答
0

您应该设置 OneWay 或 TwoWay 绑定。

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

默认情况下,我相信绑定是一次性的。

于 2009-09-14T19:27:59.057 回答
0

UI 永远不会更新,因为您正在替换 UI 附加到的对象。替换发生在 loadClient_completed 方法上。

于 2010-06-10T21:05:18.667 回答