【问题标题】:master detail binding using wpf/linq to sql使用 wpf/linq 到 sql 的主细节绑定
【发布时间】:2010-09-26 10:55:06
【问题描述】:

我正在尝试在 wpf 中创建 linq to sql 关系的主详细信息视图。该视图将有两个组合框。一个用于选择主项目,另一个用于选择详细项目。

我使用包含两个表和表之间关系的 ADO.Net 数据集实现了这一点。其中第一个组合框绑定到主字段,第二个组合框绑定到关系。

DataContext="{Binding Source={StaticResource ContactDataSet}, Path=Company}"

大师

<ComboBox Name="comboBox_CompanyName" 
          ItemsSource="{Binding}"
          DisplayMemberPath="Company"
          IsSynchronizedWithCurrentItem="True"
          />

详情,Company2Contact 是关系ip

<ComboBox Name="comboBox_ContactName" 
          ItemsSource="{Binding Path=Company2Contact}"
          DisplayMemberPath="Contact"                                  
          IsSynchronizedWithCurrentItem="True"                                  
          />

我希望使用 linq to SQL 获得类似的结果。如果将 wpf datacontext 设置为 linqDataContext 我可以绑定到主数据,但不能绑定到关系。

我查看了 datacontext 对象,它似乎已正确设置。每个公司对象都存在并包含联系人对象的集合。

有谁知道如何绑定到存储在所选公司对象中的联系人对象集合?

谢谢

【问题讨论】:

    标签: .net sql wpf linq


    【解决方案1】:

    如果启用延迟加载(默认情况下),则仅在需要时检索您的子对象(即在第二个数据绑定访问它们时)。但是,要使延迟加载工作,数据上下文需要保持活动状态。如果您正在加载主/详细对象,但只是查询主对象的数据上下文,此时它实际上并没有检索到详细信息。

    另一个选项是使用数据上下文的 LoadWith 选项。您需要指定在加载主对象时还需要详细对象。

    就我个人而言(这可能是非常有争议的),但我倾向于让 DataContext 在我的屏幕的生命周期内保持活跃。它使事情变得如此简单,并且根本没有性能受到影响。我在我的 ViewModel 中执行此操作。我在其中保留了对 DataContext 的引用。

    【讨论】:

    • 同意,要么保持上下文打开,要么使用 LoadWith 选项在初始绑定中获取数据。
    • 感谢您的回答。你会推荐哪个选项?
    • 在答案中查看我的附加说明
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2011-01-08
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多