【问题标题】:Silverlight Bind to TextBlock from RIA ServicesSilverlight 从 RIA 服务绑定到 TextBlock
【发布时间】:2009-09-01 05:57:47
【问题描述】:

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

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

这是在 &lt;Canvas&gt; 内部,DataContext 设置为 MyClient,位于 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();
}

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

【问题讨论】:

    标签: silverlight data-binding wcf-ria-services


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您应该设置 OneWay 或 TwoWay 绑定。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多