2012-02-04 2 views
0

Вот проблема:Windows Phone передачи кнопка ручки по страницам

private void editTaskButton_Click(object sender, RoutedEventArgs e) 
    { 
     // Cast the parameter as a button. 
     var button = sender as Button; 

     if (button != null) 
     { 

      // Get a handle for the to-do item bound to the button. 
      ToDoItem toDoEdit = button.DataContext as ToDoItem; 

      // I need to get toDoEdit handle to the EditTaskPage so that I can work on it 
      NavigationService.Navigate(new Uri("/EditTaskPage.xaml",   UriKind.Relative)); 

     } 

    } 

мне нужно использовать toDoEdit ручку (из списка) на (Windows Phone страницы) EditTaskPage Что бы easyest и или самый эффективный способ сделать это. Пожалуйста, будьте конкретны. Впервые я работаю с локальной базой данных Windows Phone.

Вот что мой ToDoItem выглядит следующим образом:

public class ToDoDataContext : DataContext 
    { 
    // Pass the connection string to the base class. 
    public ToDoDataContext(string connectionString) 
     : base(connectionString) 
    { } 

    // Specify a table for the to-do items. 
    public Table<ToDoItem> Items; 

    // Specify a table for the categories. 
    public Table<ToDoCategory> Categories; 
} 

ToDoDataContext.cs:

using System; 
    using System.ComponentModel; 
    using System.Data.Linq; 
    using System.Data.Linq.Mapping; 

    namespace project 
    { 


public class ToDoDataContext : DataContext 
{ 
    // Pass the connection string to the base class. 
    public ToDoDataContext(string connectionString) 
     : base(connectionString) 
    { } 

    // Specify a table for the to-do items. 
    public Table<ToDoItem> Items; 

    // Specify a table for the categories. 
    public Table<ToDoCategory> Categories; 
} 

[Table] 
public class ToDoItem : INotifyPropertyChanged, INotifyPropertyChanging 
{ 



    // Define ID: private field, public property, and database column. 
    private int _toDoItemId; 

    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 


    public int ToDoItemId 
    { 
     get { return _toDoItemId; } 
     set 
     { 
      if (_toDoItemId != value) 
      { 
       NotifyPropertyChanging("ToDoItemId"); 
       _toDoItemId = value; 
       NotifyPropertyChanged("ToDoItemId"); 
      } 
     } 
    } 

    // Define item name: private field, public property, and database column. 
    private string _itemName; 

    [Column] 
    public string ItemName 
    { 
     get { return _itemName; } 
     set 
     { 
      if (_itemName != value) 
      { 
       NotifyPropertyChanging("ItemName"); 
       _itemName = value; 
       NotifyPropertyChanged("ItemName"); 
      } 
     } 
    } 

    // Define completion value: private field, public property, and database column. 
    private bool _isComplete; 

    [Column] 
    public bool IsComplete 
    { 
     get { return _isComplete; } 
     set 
     { 
      if (_isComplete != value) 
      { 
       NotifyPropertyChanging("IsComplete"); 
       _isComplete = value; 
       NotifyPropertyChanged("IsComplete"); 
      } 
     } 
    } 

    // Version column aids update performance. 
    [Column(IsVersion = true)] 
    private Binary _version; 


    // Internal column for the associated ToDoCategory ID value 
    [Column] 
    internal int _categoryId; 

    // Entity reference, to identify the ToDoCategory "storage" table 
    private EntityRef<ToDoCategory> _category; 

    // Association, to describe the relationship between this key and that "storage" table 
    [Association(Storage = "_category", ThisKey = "_categoryId", OtherKey = "Id", IsForeignKey = true)] 
    public ToDoCategory Category 
    { 
     get { return _category.Entity; } 
     set 
     { 
      NotifyPropertyChanging("Category"); 
      _category.Entity = value; 

      if (value != null) 
      { 
       _categoryId = value.Id; 
      } 

      NotifyPropertyChanging("Category"); 
     } 
    } 


    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    // Used to notify that a property changed 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion 

    #region INotifyPropertyChanging Members 

    public event PropertyChangingEventHandler PropertyChanging; 

    // Used to notify that a property is about to change 
    private void NotifyPropertyChanging(string propertyName) 
    { 
     if (PropertyChanging != null) 
     { 
      PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); 
     } 
    } 

    #endregion 
} 


[Table] 
public class ToDoCategory : INotifyPropertyChanged, INotifyPropertyChanging 
{ 

    // Define ID: private field, public property, and database column. 
    private int _id; 

    [Column(DbType = "INT NOT NULL IDENTITY", IsDbGenerated = true, IsPrimaryKey = true)] 
    public int Id 
    { 
     get { return _id; } 
     set 
     { 
      NotifyPropertyChanging("Id"); 
      _id = value; 
      NotifyPropertyChanged("Id"); 
     } 
    } 

    // Define category name: private field, public property, and database column. 
    private string _name; 

    [Column] 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      NotifyPropertyChanging("Name"); 
      _name = value; 
      NotifyPropertyChanged("Name"); 
     } 
    } 

    // Version column aids update performance. 
    [Column(IsVersion = true)] 
    private Binary _version; 

    // Define the entity set for the collection side of the relationship. 
    private EntitySet<ToDoItem> _todos; 

    [Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")] 
    public EntitySet<ToDoItem> ToDos 
    { 
     get { return this._todos; } 
     set { this._todos.Assign(value); } 
    } 


    // Assign handlers for the add and remove operations, respectively. 
    public ToDoCategory() 
    { 
     _todos = new EntitySet<ToDoItem>(
      new Action<ToDoItem>(this.attach_ToDo), 
      new Action<ToDoItem>(this.detach_ToDo) 
      ); 
    } 

    // Called during an add operation 
    private void attach_ToDo(ToDoItem toDo) 
    { 
     NotifyPropertyChanging("ToDoItem"); 
     toDo.Category = this; 
    } 

    // Called during a remove operation 
    private void detach_ToDo(ToDoItem toDo) 
    { 
     NotifyPropertyChanging("ToDoItem"); 
     toDo.Category = null; 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    // Used to notify that a property changed 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion 

    #region INotifyPropertyChanging Members 

    public event PropertyChangingEventHandler PropertyChanging; 

    // Used to notify that a property is about to change 
    private void NotifyPropertyChanging(string propertyName) 
    { 
     if (PropertyChanging != null) 
     { 
      PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); 
     } 
    } 

    #endregion 
    } 


} 

ответ

1

Существует более чем один способ сделать это, вот два:

  1. (Quick 'n' dirty): поместите ToDoItem в хорошо известный объект, такой как объект App.
  2. Поместите идентификатор ToDoItem в Uri: NavigationService.Navigate(new Uri("/EditTaskPage.xaml?id=" + toDoEdit.Id , UriKind.Relative)); и извлеките элемент в EditTaskPage.
+0

Удивительно, мне нужно знать, как извлечь объект из базы данных с другой стороны. Что именно я вызываю, чтобы запросить базу данных, зная идентификационный номер? Мне нужно работать с дескриптором на другой странице. –

+0

У вашего ToDoTasks есть идентификатор? Если это так, вы можете просто запросить контекст: «var toDoItem = toDoContext.Where (i => i.ID == id);' –

+0

My toDoDataContext предоставляет только ссылочные равные и равные. Я поставил свой ToDoDataContext.cs выше. –