Основная структура для MVVM WPF - PullRequest
0 голосов
/ 30 мая 2018

В одной руке у меня есть модель, которая должна была собирать данные из нескольких файлов и создавать базу данных с ориентированными объектами, а в другой - мой интерфейс, в котором я хочу отображать данные из своей базы данных.Поэтому я использую привязку, но мой ComboBox и т. Д. Остаются пустыми.У меня такое ощущение, что моя база данных создается, а затем стирается при запуске интерфейса.Вот код моего Main, определенный в App.xaml.cs:

public partial class App : Application
{
    [STAThread]
    public static void Main()
    {
        var application = new App();
        application.InitializeComponent();
        DirectoryInfo dir = new DirectoryInfo("P:\\....");
        Model model = new Model(dir);
        model.entityBox.initialize();
        application.Run();
    }
}

Код для привязки в MainWindow.xaml:

  <Window.DataContext>
    <local:EntityBox></local:EntityBox>
  </Window.DataContext>
  <Grid>
    <ComboBox x:Name="critereComboBox" ItemsSource="{Binding Criteres}"/>

В EntityBox.cs:

        private List<string> _criteres = new List<string>();
        public void initialize()
        {
            _criteres.Add("TXC");
            _criteres.Add("TYC");
            _criteres.Add("TZC");
            _criteres.Add("MXC");
            _criteres.Add("MYC");
            _criteres.Add("MZC");
        }
        public List<string> Criteres
        {
            get{ return _criteres; }
        }

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Полагаю, это односторонняя привязка.Короткий ответ - использовать ObservableCollection

private ObservableCollection<string> _criteres = new ObservableCollection<string>();

Поскольку он будет уведомлять вас при вызове Add, но вам может потребоваться вызвать их в UIDispatcher.

0 голосов
/ 30 мая 2018

Вам необходимо инициализировать поле со списком внутри класса контекста, потому что когда вы используете XAML для привязки контекста данных, класс контекста создается независимо XAML, создание модели в функции Main буквально не влияет на ваш элемент управления.Вам также необходимо реализовать INotifyPropertyChanged для вашего класса Model (ViewModel?).Я также предлагаю вам перейти на MVVM-подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...