【问题标题】:How do you use two-way binding if the instance being bound does not implement INotifyPropertyChanged in Silverlight 2?如果被绑定的实例未在 Silverlight 2 中实现 INotifyPropertyChanged,您如何使用双向绑定?
【发布时间】:2009-01-19 17:20:54
【问题描述】:

我正在尝试在 Silverlight 2 中编写一个相当简单的用户控件,它允许用户搜索现有地址、可选地更新所选地址以及添加新地址。

为此,我已经建立了一个简单的 WCF 服务,它允许简单的查询,我目前正在将它连接到一个文本框、列表框组合(很快将被 Silverlight 工具包中的 AutoCompleteBox 替换)。

我的问题更多的是理解,我的服务的返回类型是 IList

类型,并且 Address 没有实现 INotifyPropertyChanged 并且它似乎不适合从服务返回的对象(也可以由其他客户端)以嵌入 SL2 特定功能。使用双向绑定编辑现有地址的最佳方法是什么。

基本思路如下:

  1. 用户在文本框中输入信息
  2. 调用服务以检索匹配地址 IList
    ,该地址在我的服务的 Reference.cs 中作为 ObservableCollection
    返回
  3. 返回值设置为列表框的 ItemSource
  4. 用户选择了正确的地址并表示需要更新
  5. 地址实例绑定到包含多个文本框的控件容器

基本上,我希望绑定文本框中的任何更改都自动反映在 Address 实例中,但如果没有 INotifyPropertyChanged,这将如何工作?我是否必须在我的 SL2 应用程序中创建另一个类来有效地覆盖我的服务数据对象的属性实现?

那里的任何人都可以为我指出正确的方向,因为这对我来说没有意义......

干杯,

史蒂夫

【问题讨论】:

    标签: c# wcf data-binding silverlight-2.0


    【解决方案1】:

    您如何生成 WCF 代理?我在 VS2008 的 SL2 项目中使用了“添加服务引用...”,并且我生成的代理确实实现了 INotifyPropertyChanged(即使服务器端类型没有)。

    对于常规 WCF(不是 SL2),svcutil 有一个 /enableDataBinding 开关可以完成所有这些操作。如果您使用的是 IDE,可能会有一个复选框。

    由于这些代理是从元数据生成的,它们完全独立于服务器端代码,因此实现INotifyPropertyChanged 的 SL2 版本没有问题。

    【讨论】:

    • 我在 VS.NET 2008 中使用“添加服务引用”对话框,在创建引用后查看服务引用设置似乎没有包含可能的选项。
    • 作为后续,/enableDataBinding 似乎很有效,只是希望我能在 IDE 中找到一个选项...
    • 请记住 - 让 IDE 处理为您生成的所有代理并不总是最好的主意,尤其是当您尝试执行任何非默认行为时。
    • 我认为复选框在“高级...”页面上
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多