У меня есть список в приложении wpf, который получает свои отображаемые данные из локальной базы данных .mdf в фоновом режиме.У меня есть форма, которая добавляет новые данные в список, но я не могу получить список для обновления / обновления, чтобы также показать вновь добавленные данные.
Мой код:
private void Add_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
if (tb_Mitarbeiter_Nachname.Text == "" && tb_Mitarbeiter_Vorname.Text == "")
{
MessageBox.Show("Leer");
} else
{
Mitarbeiter ma = new Mitarbeiter
{
Vorname = tb_Mitarbeiter_Vorname.Text,
Nachname = tb_Mitarbeiter_Nachname.Text,
Belastung = 0
};
dataContext.Mitarbeiter.InsertOnSubmit(ma);
dataContext.SubmitChanges();
}
UpdateMitarbeiterList();
}
public void UpdateMitarbeiterList()
{
lb_Mitarbeiter.ItemsSource = null;
lb_Mitarbeiter.ItemsSource = dataContext.Mitarbeiter;
lb_Mitarbeiter.SelectedValuePath = "Id";
}
И мой.xaml:
<ListBox x:Name="lb_Mitarbeiter"
Height="250"
Margin="2"
BorderThickness="1"
Style="{StaticResource VirtualisedMetroListBox}"
ItemTemplate="{StaticResource lbMitarbeiterTemplate}"
/>
<Window.Resources>
<DataTemplate x:Key="lbMitarbeiterTemplate">
<StackPanel FlowDirection="LeftToRight" Orientation="Horizontal">
<TextBlock Text="{Binding Path=Vorname}"></TextBlock>
<TextBlock Text=" "></TextBlock>
<TextBlock Text="{Binding Path=Nachname}"></TextBlock>
</StackPanel>
</DataTemplate>
</Window.Resources>
Установка для ItemsSource моего списка нулевого значения, а затем добавление ItemsSource снова не работает.
Быстрое обновление: я немного повозился и заметил что-то странное.Я также вызываю UpdateMitarbeiterList ();метод в приложениях _OnLoad метод.Если я не вызываю его там, но только после добавления нового элемента в базу данных, он отображает оба элемента в списке.Таким образом, кажется, что он неправильно применяет ItemsSource, хотя я установил для него значение null и добавил его снова.
Редактировать: Добавлен весь код с определением базы данных.
public partial class MainWindow : MetroWindow
{
LinqToSqlDataClassesDataContext dataContext;
public MainWindow()
{
InitializeComponent();
ThemeManager.ChangeAppStyle(Application.Current, ThemeManager.GetAccent("Red"), ThemeManager.GetAppTheme("BaseLight"));
string connectionString = ConfigurationManager.ConnectionStrings["SCVT_Aufgabenplaner.Properties.Settings.SCVT_Aufgabenplaner_DBConnectionString"].ConnectionString;
dataContext = new LinqToSqlDataClassesDataContext(connectionString);
}
private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
{
UpdateMitarbeiterList();
}
public void UpdateMitarbeiterList()
{
lb_Mitarbeiter.ItemsSource = null;
lb_Mitarbeiter.ItemsSource = dataContext.Mitarbeiter;
lb_Mitarbeiter.SelectedValuePath = "Id";
}
#region Button Click Methoden
private void Add_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
if (tb_Mitarbeiter_Nachname.Text == "" && tb_Mitarbeiter_Vorname.Text == "")
{
MessageBox.Show("Leer");
} else
{
Mitarbeiter ma = new Mitarbeiter
{
Vorname = tb_Mitarbeiter_Vorname.Text,
Nachname = tb_Mitarbeiter_Nachname.Text,
Belastung = 0
};
dataContext.Mitarbeiter.InsertOnSubmit(ma);
dataContext.SubmitChanges();
}
UpdateMitarbeiterList();
}
private void del_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(lb_Mitarbeiter.SelectedValue.ToString());
}
#endregion
}
Определение базы данных:
CREATE TABLE [dbo].[Mitarbeiter] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Vorname] VARCHAR (50) NOT NULL,
[Nachname] VARCHAR (50) NOT NULL,
[Belastung] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);