【问题标题】:Silverlight DataBinding to properties of objectSilverlight 数据绑定到对象的属性
【发布时间】:2011-01-18 11:11:59
【问题描述】:

我有一个silverlight ChildWindow。当我点击一个链接时,它会打开这个子窗口并显示我的 ViewModel 中的一些数据。问题是当 ViewModel 中的数据更新时,这并没有更新。

来自弹出窗口的示例:

<TextBox Text="{Binding Path=AgentExceptionDetail.Action, Mode=TwoWay}" />

视图模型:

private AgentExceptionDetail _agentExceptionDetail;
public AgentExceptionDetail AgentExceptionDetail
{
  get { return _agentExceptionDetail; }
  set
  {
    if (value != _agentExceptionDetail)
    {
      RaisePropertyChanged("AgentExceptionDetail");
      _agentExceptionDetail = value;
    }
  }
}

此 AgentExceptionDetail 对象是通过调用 RIA-Services 填充的。此调用成功,数据恢复正常。 Binding 实际上的行为类似于 Mode=OneTime 而不是 OneWay,因为当我关闭并重新打开弹出窗口时会显示数据,但第一次打开弹出窗口时 AgentExceptionDetail=null 会在调用返回时填充。

这是否与我在绑定实际上正在寻找“AgentExceptionDetail.Action”时为“AgentExceptionDetail”引发属性更改事件有关?如果是这样,有没有办法解决这个问题?

【问题讨论】:

  • 我们需要更多细节,你更新了什么? AgentExceptionDetail 或其 Action 属性。 Action 属性是什么样的? ...从概念上讲,您正在做的事情看起来是正确的!

标签: silverlight xaml data-binding silverlight-4.0 viewmodel


【解决方案1】:

如果我理解您的描述正确,它应该在您的场景中按您的需要工作。但是,我在这里看到了一个严重的问题:

    if (value != _agentExceptionDetail)
    {
      RaisePropertyChanged("AgentExceptionDetail");
      _agentExceptionDetail = value;
    }

您在实际更改任何内容之前发送更改通知!颠倒操作顺序以纠正此错误。

    if (value != _agentExceptionDetail)
    {
      _agentExceptionDetail = value;
      RaisePropertyChanged("AgentExceptionDetail");
    }

【讨论】:

  • 我羞愧地低下了头......你说得对,我在改变任何事情之前就提出了这个事件。小学生错误!谢谢你。我一直盯着它看太久了,以至于我错过了明显的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2011-02-20
相关资源
最近更新 更多