【问题标题】:Self Tracking Entities ListView Binding Losing Value On Change自我跟踪实体 ListView 绑定在更改时失去价值
【发布时间】:2012-01-19 23:29:01
【问题描述】:

我的应用程序正在使用自我跟踪实体,并且我从 WCF 服务获取数据。在我的 WCF 服务查询中,我使用 .Include("") 来加载与我的查询的实体关系。

    public List<IndividualDisability> GetIndividualDisabilities()
    {
        using (var context = new ADATrackingEntities())
        {
            return context.IndividualDisabilities.OfType<IndividualDisability>().Include("ADACode").ToList();
        }
    }

然后我将结果添加到 ICollectionView。我有一个绑定到 ICollectionView 的 ListView,我的 ListView 中的某些列绑定到我的实体关系中的值。我有一个主详细信息设置,列表视图的当前项绑定到我正在编辑的实体对象。

<ListView Margin="0,0,10,0" MaxHeight="400" MaxWidth="300" HorizontalAlignment="Left" AlternationCount="2" ItemsSource="{Binding Path=IndividualDisabilitiesSource}" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding Path=CurrentIndividualDisability, Mode=TwoWay}" SelectionMode="Single" ItemContainerStyle="{DynamicResource ListViewItemContainerStyle}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Case #" Width="Auto"  
                DisplayMemberBinding="{Binding Individual.CaseNumberShort}" />
            <GridViewColumn Header="LName" Width="Auto"  
                DisplayMemberBinding="{Binding Individual.LastName}" />
            <GridViewColumn Header="FName" Width="Auto"  
                DisplayMemberBinding="{Binding Individual.FirstName}" />
            <GridViewColumn Header="ADA Code" Width="Auto" 
                DisplayMemberBinding="{Binding ADACode.ADACodeDesc}" />
        </GridView>
    </ListView.View>
</ListView>

问题在于,在我的编辑部分,我使用组合框来更改所选记录中的值,并将我的 ListView 中的相关值更改为单元格中的空白值。我能让它再次出现的唯一方法是返回数据库并再次加载数据。我的组合框或列表视图绑定是否缺少某些内容??

<ComboBox Height="25" Width="200" ItemsSource="{Binding ADACodesSource}"
    DisplayMemberPath="ADACodeDesc" SelectedValuePath="ADACodeID" 
    SelectedValue="{Binding Path=CurrentIndividualDisability.ADACodeID, Mode=TwoWay, 
    NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />

【问题讨论】:

  • 如果您在此代码运行时查看输出控制台,是否看到任何绑定错误?
  • 看起来您只是为要更改的属性设置不同的 ID。您是否正在处理更改属性设置器中的实际对象(ADACode)?我可能会将 SelectedItem 与“ADACode”绑定,而不是将 SelectedValue/SelectedValuePath 与“ADACodeId”绑定。相同的 DisplayMemberPath。
  • 我没有看到任何绑定错误,但是当我使用 SelectedItem 绑定时,它实际上会按预期正确更改列表视图中的值。但是,它现在没有在组合框中设置值。我也有双向绑定设置。有什么想法吗?
  • 我在 MSDN WPF 论坛上发布了一个复制错误的示例项目。希望这可以帮助我更好地展示我的餐桌关系和我的情况。 social.msdn.microsoft.com/Forums/en-US/wpf/thread/…
  • 有人有什么想法吗?我不知道从这里去哪里。

标签: c# wpf silverlight entity-framework mvvm


【解决方案1】:

我无法让它与组合框一起工作,所以我决定创建一个自定义控件。它是一个 AutoComplete/ComboBox,似乎具有正确的绑定类型。这篇博文中详细介绍了这个控件,一切都很好:

http://weblogs.asp.net/dwahlin/archive/2009/07/06/creating-an-combobox-style-autocompletebox-control-in-silverlight.aspx

【讨论】:

  • 对于普通组合框控件有此问题的任何人。我通过在组合框属性中设置 IsSyncronizedWithCurrentItem=true 来修复它。现在一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2012-03-05
  • 1970-01-01
相关资源
最近更新 更多