使用Observable Collection - WP8从Linq数据库绑定数据

时间:2015-03-10 13:01:24

标签: windows-phone-8 linq-to-sql observablecollection

我使用linq在数据库中保存了一些数据。我有一个DAO类,我放置了所有的CRUD方法,并且我有另一个类来定义我的表及其列。

[Table(Name = "CONTACTS")]
public class UserContacts
{
    private int _id;

    [Column(Name = "ID", IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false, AutoSync = AutoSync.OnInsert)]
    public int ID
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _name;

    [Column(Name = "NAME", CanBeNull = false)]
    public string NAME
    {
        get { return _name; }
        set { _name = value; }
    }

    private string _number;

    [Column(Name = "NUMBER", CanBeNull = false)]
    public string NUMBER
    {
        get { return _number; }
        set { _number = value; }
    }
}

DAO课程

public class DAOUserContacts
{
    public IList<UserContacts> list = new List<UserContacts>();

    public IList<UserContacts> GetData()
    {
        try
        {
            using (DataBaseContext db = new DataBaseContext(DataBaseContext.ConnectionString))
            {
                list = (from info in db.UserContacts orderby info.COLUMN_NAME ascending select info).ToList();
            }
            return list;
        }
        catch (Exception)
        {
            return null;
        }
    }

    // Other methods
}

我在LongListSelector中显示存储在此数据库中的所有数据。

在Main.cs构造函数中

llsContacts.DataContext = new DAORUserContacts().GetData();

在Main.xaml

<phone:LongListSelector x:Name="llsContacts" ItemsSource="{Binding}" >
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <ListBoxItem local:TiltEffect.IsTiltEnabled="true">
                <Grid Margin="0" >
                    <TextBlock Text="{Binding NAME}" FontFamily="Segoe WP" FontSize="28" Margin="77,0,0,0" />
                    <TextBlock Text="{Binding NUMBER}" FontFamily="Segoe WP Light" FontSize="17" Margin="77,33,0,0"/>
                </Grid>
            </ListBoxItem>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

我在网上做了一个研究,发现了ObservableCollection,我想用它。我读了这篇文章http://www.codeproject.com/Articles/80555/Databinding-in-Silverlight-applications#_Toc261149245来了解它是如何工作的,但我仍有一些疑问。

在本文中,创建了一个继承自INotifyPropertyChanged的Employee,以及一个继承自ObservableCollection的Emplyees。

就我而言,我希望我的列表(在xaml上)始终显示数据库中的内容。

可以从INotifyPropertyChanged继承我的UserContacts 吗?因为这个类声明了一个表......

我的DAOClass应该继承自ObservableCollection吗?或者只是我的GetData()返回一个ObservableCollection而不是List

另一件事......有一个按钮,当用户按下时,更新数据库(搜索设备上的所有联系人,并从数据库中删除已在手机中删除的内容,并添加到数据库中已添加到手机中的内容)。

使用ObservableCollection,当搜索联系人完成,我的数据库更新后,我应该调用某些内容来更新xaml上的LongListSelector 吗?或者在数据库更新之后,LongListSelector也会自动更新?

...谢谢

1 个答案:

答案 0 :(得分:0)

用户视图模型,用于分配数据上下文并在xaml端将可观察集合指定为binding.And viewmodel应具有可用于绑定的可观察集合。然后,如果您对集合进行任何更改,则会自动更新longlistselector。 每次都应根据数据库更改来更改集合。