Рейтинг:
0
Jon McKee
Хм, я не уверен, что это основные проблемы, но некоторые проблемы я заметил:
public partial class DefendantView : Page
{
public int MasterId { get; private set; }
public DefendantView(int ID)
{
InitializeComponent();
GetDefendantById(ID);
//You aren't persisting MasterId to anything, it goes out of scope.
//int MasterId = ID;
MasterId = ID;
}
public void GetDefendantById(int ID)
{
using(DataController context = new DataController())
{
DefendantModel defendant = context.GetDefendantById(ID);
grdDefendantDetails.DataContext = defendant;
}
}
private void AddWitness(object sender, RoutedEventArgs e)
{
//If this is your button click event handler, sender is the Button
//not an int.
//int defId = (int)sender;
DefendantModel st = new DefendantModel();
int defId = Convert.ToInt32(st.ID);
this.NavigationService.Navigate(new AddWitnessView(defId));
}
}
Вы еще не отправили сообщение
DefendantModel
класс, но я подозреваю
AddWitness
это не то, что вы думаете. Вы создаете новый
DefendentModel
объект и получение любого идентификатора по умолчанию для этого класса. Может быть, вы искали
int defId = Convert.ToInt32(MasterId);
Трудно сказать, не имея полной картины того, что происходит :)
Branden Coker
Джон, спасибо за ответ. Я забыл упомянуть, что идентификатор приходит из другого представления, когда кто-то выбирает ответчика из списка. Эта часть работает, если я выбираю первого человека в списке, я получаю правильный идентификатор, как и любой другой человек. И моя модель-защитник, и модель-свидетель находятся ниже. Извини, что забыл их отправить. У меня есть логика доступа к данным (Linq) в отдельной папке.
Модель Подсудимого :
public class DefendantModel
{
public int ID { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string NameSuffix { get; set; }
public string Alias { get; set; }
public string SSN { get; set; }
public string Race { get; set; }
public string Sex { get; set; }
public List<WitnessModel> WitnessModelList { get; set; }
public WitnessModel WitnessModel { get; set; }
}
Свидетель-Модель:
public class WitnessModel
{
public int ID { get; set; }
public int MasterID { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string NameSuffix { get; set; }
public string Sex { get; set; }
public string Race { get; set; }
}
Дайте мне знать, если я что-то упустил. Спасибо.
Jon McKee
Ладно, думаю, я знаю, что здесь происходит. Таким образом, это одна страница в более крупном приложении. Когда эта страница создается, вы передаете идентификатор вашего ответчика, который является как первичным ключом для вашего ответчика, так и внешним ключом для ваших свидетелей, извлекаете данные ответчика и обновляете их. DataContext
для одного из элементов управления страницей, отображающих эти данные. Пока все хорошо.
Итак, теперь у вас есть страница для подсудимого, и вы хотите, чтобы они могли добавлять свидетелей. Таким образом, где-то на странице есть кнопка "Добавить свидетеля", которая обрабатывается AddWitness()
Этот обработчик событий отвечает за настройку представления свидетеля и передачу идентификатора для этого ответчика, чтобы ID можно было использовать в качестве MasterID (внешнего ключа) при создании новых свидетелей? Правильно?
Если это так, то все, что вам нужно сделать, это передать идентификатор конструктора обработчику. Мой пример выше действительно сделал это:
//Add a property to your page
public int MasterID { get; private set; }
public DefendantView(int ID)
{
InitializeComponent();
GetDefendantById(ID);
//Set that property in your constructor
MasterID = ID;
}
private void AddWitness(object sender, RoutedEventArgs e)
{
//Pass the property to your witness view
this.NavigationService.Navigate(new AddWitnessView(MasterID));
}
Branden Coker
Джон,
Я думаю, что смогу понять это отсюда. Спасибо вам за вашу помощь. Кнопка, к которой я пытаюсь получить идентификатор, на самом деле является кнопкой сохранения в представлении AddNewWitness. Представление имеет идентификатор от ответчика, это вопрос преобразования данных из полей в модель и сохранения его там, где моя проблема. Вот что я сейчас делаю..
private void btnSaveWitness_Click(object sender, RoutedEventArgs e)
{
using (DataController context = new DataController())
{
DefendantViewModel defendant = new DefendantViewModel();
defendant.DefendantModel.FirstName = txtFName.Text;
defendant.DefendantModel.MiddleName = txtMName.Text;
defendant.DefendantModel.LastName = txtLName.Text;
defendant.DefendantModel.NameSuffix = txtSuffix.Text;
defendant.DefendantModel.Race = cboRace.SelectedValue.ToString();
defendant.DefendantModel.Sex = cboSex.SelectedValue.ToString();
context.CreateWitness(defendant);
}