编辑列表项的源(数据库)后,我无法更新列表框的内容

时间:2019-06-13 11:31:58

标签: c# database wpf linq listbox

我在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)
);

0 个答案:

没有答案