Я пытаюсь выяснить привязку WPF к SQLite.
У меня есть модель данных объекта ADO.NET, созданная для представления моей базы данных SQLite.База данных содержит только одну таблицу «Люди» с двумя столбцами «person_id» и «person_name».Теперь я сгенерировал классы EDM для этой таблицы в своем приложении WPF.
Я пытаюсь привязать список к списку.Я могу удалить элементы из источника и увидеть, как он обновляет список.Но я не могу добавить элементы к источнику, используя текстовое поле, и вижу, как оно обновляет список.
Я объявил объекты данных в классе Window1 следующим образом:
private static MyNewSqliteDbEntities2 _myEntities = new MyNewSqliteDbEntities2();
У меня естьОкно списка, которое привязано к ObjectQuery в обработчике событий Window_Loaded, например:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
peopleListBox.ItemsSource = _myEntities.People;
}
У меня есть еще одно текстовое поле, которое я использую для добавления людей, нажав на кнопку.И я могу удалить элементы, выбрав элемент в списке и нажав кнопку удаления.Изменения фиксируются в базе данных при нажатии кнопки фиксации.Пожалуйста, рассмотрите код ниже:
private void addButton_Click(object sender, RoutedEventArgs e)
{
if (addPersonTextBox.Text != "")
{
People newPerson = new People();
newPerson.person_name = addPersonTextBox.Text;
//_myEntities.AddToPeople(newPerson);
_myEntities.AddObject("People", newPerson);
addPersonTextBox.Text = "";
}
}
private void deleteButton_Click(object sender, RoutedEventArgs e)
{
_myEntities.DeleteObject(peopleListBox.SelectedItem);
}
private void commitButton_Click(object sender, RoutedEventArgs e)
{
_myEntities.SaveChanges();
}
Я попытался обновить элемент управления списком с помощью другой кнопки под названием «Обновить» следующим образом, но безуспешно (хотя, когда я перебираю код, я вижу источникобновляется):
private void refreshButton_Click(object sender, RoutedEventArgs e)
{
peopleListBox.ItemsSource = null;
peopleListBox.ItemsSource = _myEntities.People;
}
Вот код XAML, если вам интересно:
<Window x:Class="BindingToSqLite.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="400" Width="400" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="personNameTemplate">
<TextBlock Text="{Binding Path=person_name}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="190*" />
<ColumnDefinition Width="94*" />
<ColumnDefinition Width="94*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="182*" />
<RowDefinition Height="38*" />
<RowDefinition Height="38*" />
<RowDefinition Height="32*" />
</Grid.RowDefinitions>
<ListBox Margin="5" Name="peopleListBox" Grid.ColumnSpan="3" ItemTemplate="{StaticResource personNameTemplate}" />
<TextBox Grid.Row="1" Grid.ColumnSpan="2" Margin="5,10" Name="addPersonTextBox" />
<Button Grid.Column="2" Grid.Row="1" Margin="5" Name="addButton" Click="addButton_Click">Add</Button>
<Button Grid.Row="2" Margin="5" Name="commitButton" Click="commitButton_Click">Commit</Button>
<Button Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" Margin="5" Name="deleteButton" Click="deleteButton_Click">Delete</Button>
<Button Grid.Row="3" Margin="5" Name="refreshButton" Click="refreshButton_Click">Refresh</Button>
</Grid>
</Window>
Я не уверен, что делаю это совершенно неправильно.Любая помощь приветствуется.