Я добавляю новые узлы / элементы в список BindableCollection под названием People, но я не вижу результата в моем пользовательском интерфейсе
Я использую Caliburn.Micro и MongoDB в проекте WPF, чтобы узнать, как он работает. Когда я добавляю нового человека в свой список, я вижу в таблице БД, но моя форма не обновляется автоматически. Я видел в Интернете некоторые ссылки на элемент управления DataGrid, который не может быть хорошим выбором для динамического рендеринга в реальном времени, и я читаю все, что могу найти по теме, но не понял, что я делаю неправильно.
<DataGrid x:Name="People" AlternatingRowBackground="AliceBlue"
CanUserAddRows="False" AutoGenerateColumns="False" Grid.ColumnSpan="4" ItemsSource="{Binding People}">
<DataGrid.Columns>
<DataGridTextColumn Header="FullName" Binding="{Binding Path=FullName}" />
<!--<DataGridComboBoxColumn Header="FullName" Binding ="{Binding Path=FullName}"/>-->
<DataGridCheckBoxColumn Header="Is Alive" Binding="{Binding Path=IsAlive}" />
<DataGridTemplateColumn Header="Primary Address">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=PrimaryAddress.FullAddress}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=Addresses}" SelectedItem="{Binding Path=PrimaryAddress}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=FullAddress}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DateOfBirth, StringFormat=d}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Path=DateOfBirth}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Мне нравится видеть изменения в списке людей в режиме реального времени. Мой ShellView.xaml.cs имеет:
public partial class ShellView : Window
{
MongoCRUD da = new MongoCRUD("mongoChallenge");
PersonModel newPerson = new PersonModel();
public ShellView()
{
InitializeComponent();
}
private void NewPerson_Click(object sender, RoutedEventArgs e)
{
newPerson.FirstName = firstName.Text;
newPerson.LastName = lastName.Text;
//List<PersonModel> People = new List<PersonModel>();
AddressModel newAddress = new AddressModel();
newAddress.StreetAddress = StreetAddress.Text;
newAddress.City = City.Text;
newAddress.State = State.Text;
newAddress.ZipCode = ZipCode.Text;
newPerson.PrimaryAddress = newAddress;
da.InsertRecord<PersonModel>("challengeUsers", newPerson);
List<PersonModel> updatedList = new List<PersonModel>();
updatedList = da.LoadRecords<PersonModel>("challengeUsers");
}
private void Clear_Click(object sender, RoutedEventArgs e)
{
firstName.Text = "";
lastName.Text = "";
StreetAddress.Text = "";
City.Text = "";
State.Text = "";
ZipCode.Text = "";
DateOfBirth.SelectedDate = new DateTime();
//dateOfBirth.DisplayDate = DateTime.Today;
//dateOfBirth.ClearValue(); Not sure how to reset the date of birth when I clear the form
}
private void DateOfBirth_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
{
newPerson.DateOfBirth = (DateTime)DateOfBirth.SelectedDate;
}
}
И мой ShellViewModel.cs имеет:
public class ShellViewModel: Screen
{
MongoCRUD da = new MongoCRUD("mongoChallenge");
BindableCollection<PersonModel> testList = new BindableCollection<PersonModel>();
private BindableCollection<PersonModel> _people;
private AddressModel _primaryAddress;
private PersonModel _newPerson;
public PersonModel NewPerson
{
get { return _newPerson; }
set
{
_newPerson = value;
NotifyOfPropertyChange(() => NewPerson);
}
}
public void Update (List<PersonModel> list)
{
//People = list;
People.AddRange(list);
}
public BindableCollection<PersonModel> People
{
get
{
//load records from MongoDB table called challengeUsers
List<PersonModel> temp = da.LoadRecords<PersonModel>("challengeUsers");
_people = new BindableCollection<PersonModel>(temp);
return _people;
}
set
{
//load records from MongoDB table called challengeUsers
List<PersonModel> temp = da.LoadRecords<PersonModel>("challengeUsers");
_people = new BindableCollection<PersonModel>(temp);
NotifyOfPropertyChange(() => People);
}
}
private DateTime _dateOfBirth;
public DateTime DateOfBirth
{
get { return _dateOfBirth; }
set
{
_dateOfBirth = value;
NotifyOfPropertyChange<DateTime>(() => DateOfBirth);
}
}
public ShellViewModel()
{
MongoCRUD da = new MongoCRUD("mongoChallenge");
NotifyOfPropertyChange(() => NewPerson);
List<PersonModel> temp = da.LoadRecords<PersonModel>("challengeUsers");
People = new BindableCollection<PersonModel>(temp);
NotifyOfPropertyChange(() => People);
}
private String _fullName;
public String FullName
{
get { return _fullName; }
set
{
_fullName = value;
//FullName changed
NotifyOfPropertyChange(() => FullName);
}
}
public AddressModel PrimaryAddress
{
get { return _primaryAddress; }
set
{
//Primary Address changed
_primaryAddress = value;
NotifyOfPropertyChange(() => PrimaryAddress);
}
}
}
Большое спасибо.
Обновление от 21.05.19. Вот что я вижу, когда пытаюсь изменить коллекцию людей: введите описание изображения здесь