0

ローカル SQL CE データベースに名前を追加する Windows Phone 8 プロジェクトを作成しました。MainPage.xaml.cs ファイルのローカル データベースに単一の NameItem を追加していますが、正常に追加されていますが、アプリ実行時のリストボックス/ロングリストセレクター。助けていただければ幸いです。私は次の設定をしています:

テーブルの構造は次のとおりです。

 namespace LocalDB
{
 [Table]
 public class Names : INotifyPropertyChanged, INotifyPropertyChanging
{

     [Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false, AutoSync = AutoSync.OnInsert)]
     private int id;

     public int F_Id
     {
         get { return id; }
         set
         {
             NotifyPropertyChanging("F_Id");
             id = value;
             NotifyPropertyChanged("F_Id");
         }
     }


     [Column]
     private string f_name;

     public string F_Name
     {
         get { return f_name; }
         set
         {
             NotifyPropertyChanging("F_Name");
             f_name = value;
             NotifyPropertyChanged("F_Name");
         }
     }

     [Column]
     private string l_name;

     public string L_Name
     {
         get { return l_name; }
         set
         {
             NotifyPropertyChanging("L_Name");
             l_name = value;
             NotifyPropertyChanged("L_Name");
         }
     }



     #region Implementation of INotifyPropertyChanged

     public event PropertyChangedEventHandler PropertyChanged;

     private void NotifyPropertyChanged(string propertyName)
     {
         if (PropertyChanged != null)
         {
             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
     }
     #endregion

     #region Implementation of INotifyPropertyChanging

     public event PropertyChangingEventHandler PropertyChanging;

     private void NotifyPropertyChanging(string propertyName)
     {
         if (PropertyChanging != null)
         {
             PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
         }
     }
     #endregion


}
}

Load.xaml.cs のコード (ローカル DB からデータを取得):

namespace LocalDB
{
public partial class Load : PhoneApplicationPage
{
    private const string Con_String = @"isostore:/names.sdf";
    String fname, lname;

    public Load()
    {
        InitializeComponent();


    }
    public IList<Names> GetNames()
    {
        IList<Names> namesList = null;
        using (NamesDataContext NamesDB = new NamesDataContext(Con_String))
        {
            IQueryable<Names> query = from c in NamesDB.Names select c;
            namesList = query.ToList();

        }

        return namesList;
    }
    private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
    {
        IList<Names> listnames = this.GetNames();
        List<NameItems> nm = new List<NameItems>();
        foreach (Names mynames in listnames)
        {

            fname = mynames.F_Name.ToString();
            lname = mynames.L_Name.ToString();



            nm.Add(new NameItems() { fname = fname, lname = lname });

        }

        namelonglistselector.ItemsSource = nm;
    }

}
}
**the xaml code with LongListSelector:**
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:LongListSelector  Name="namelonglistselector">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                    <TextBlock Name="fnametextblock" Text="{Binding fname}"/>
                    <TextBlock  Name="lnametextblock" Text="{Binding lname}"/>
                    </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>
    </Grid>
    </Grid>

**the collection class Nameitems.cs**
namespace LocalDB
{
class NameItems
{
    public string fname { get; set; }
    public string lname { get; set; }
}

}

4

1 に答える 1

1

バインディング コードに問題はないようです。

それが呼び出されていることは確かPhoneApplicationPage_Loaded_1ですか?あなたが投稿したコードから、それが.

おそらく、ロードされたイベントにハンドラーを追加する必要があります。次のようにページ コンストラクターを更新します。

public Load()
{
    InitializeComponent();

    this.Loaded += this.PhoneApplicationPage_Loaded_1;
}

サンプル コード: MainPage.xaml & MainPage.xaml.cs

コメントでリンクされた再現プロジェクトに基づく更新

データベースに表示するレコードがなかったため、詳細は表示されませんでした。 Getnames()空のリストを返していました。
これの理由は、データベースが空だったからです。

データを保存しているときは、呼び出してInsertOnSubmit()いますが、変更を送信することはなく、トランザクションはディスクにコミットされません。ChildDB.SubmitChanges();への呼び出しの後に呼び出す必要がありますChildDB.Names.InsertOnSubmit(names);

これにより、データがデータベースに保存されるため、ページに移動して詳細を表示すると、表示する詳細があり、それらがページに表示されます。

于 2013-02-27T09:25:42.297 に答える