Я не могу получить содержимое списка для обновления после того, как я отредактировал его ресурс источника (который является БД) - PullRequest
0 голосов
/ 13 июня 2019

У меня есть список в приложении 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)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...