【问题标题】:Entity Framework & Binding synchronisation实体框架和绑定同步
【发布时间】:2010-03-08 08:36:28
【问题描述】:

想象我有一个实体:

public class MyObject
{
    public string Name { get; set; }
}

我有一个列表框:

<ListBox x:Name="lbParts">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我将它绑定到代码隐藏中的集合:

ObjectQuery<MyObject> componentQuery = context.MyObjectSet;
Binding b = new Binding();
b.Source = componentQuery;
lbParts.SetBinding(ListBox.ItemsSourceProperty, b);

然后单击按钮我将实体添加到 MyObjectSet:

var myObject = new MyObject { Name = "Test" };
context.AddToMyObjectSet(myObject);

这就是问题所在——这个对象需要在 UI 中更新到。但它没有添加在那里:(

【问题讨论】:

标签: wpf entity-framework data-binding


【解决方案1】:

ObjectQuery&lt;T&gt; 类没有实现INotifyCollectionChanged 接口,因此它不会在添加或删除项目时通知 UI。您需要使用 ObservableCollection&lt;T&gt; ,这是您的 ObjectQuery&lt;T&gt; 的副本;当您将项目添加到ObjectQuery&lt;T&gt; 时,也将其添加到ObservableCollection&lt;T&gt;

绑定:

private ObservableCollection<MyObject> _myObjects;
...

_myObjects = new ObservableCollection(context.MyObjectSet);
Binding b = new Binding();
b.Source = _myObjects;
lbParts.SetBinding(ListBox.ItemsSourceProperty, b);

添加项目:

var myObject = new MyObject { Name = "Test" };
context.AddToMyObjectSet(myObject);
_myObjects.Add(myObject);

【讨论】:

    【解决方案2】:

    BookLibrary 示例应用程序正在使用 EntityObservableCollection。通过这种方式,您始终可以同时更新两个世界:WPF 和实体框架。

    您可以在此处下载示例应用程序:WPF Application Framework (WAF)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多