【问题标题】:Binding data from Linq Database using Observable Collection - WP8使用 Observable Collection 绑定来自 Linq 数据库的数据 - WP8
【发布时间】:2015-03-10 13:01:23
【问题描述】:

我正在使用 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?因为这个类声明了一个Table...

我的 DAOClass 是否应该从 ObservableCollection 继承?或者只是我的 GetData() 返回 ObservableCollection 而不是 List

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

使用 ObservableCollection,当联系人搜索完成并且我的数据库更新时,我应该调用一些东西来更新 xaml 上的 LongListSelector?还是数据库更新后,LongListSelector 也会自动更新?

谢谢...

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不熟悉 ViewModel。我应该做这样的事情吗? Implementing the Model-View-ViewModel pattern for Windows Phone 8 ?但是我的应用中有更多页面,我的 Main 上有更多内容。当我使用 ViewModel 时,我的整个应用程序应该使用它,还是我可以将它用于我想要的?
    • 你可以在任何地方使用我的意思是你甚至可以用于单页。它非常简单而且很好。
    • 由于我不熟悉这个,而且我必须改变很多东西来实现这个改变,我不喜欢使用 ViewModel... 有没有另一种方法来使用 ObservableCollection 只联系人列表?
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多