我在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设置为null,然后再次添加ItemsSource无效。
快速更新: 我摆弄了一下,发现有些奇怪。我也叫UpdateMitarbeiterList();应用程序_OnLoad方法中的方法。如果我不在这里调用它,但是只有在我向数据库中添加了新项目之后,它才会在列表框中显示这两个项目。因此,即使将im设置为null并再次添加它,似乎仍无法正确地重新应用ItemsSource。
编辑:添加了整个代码以及数据库的定义。
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)
);