MVVM WPF的主要结构

时间:2018-05-30 08:10:36

标签: c# wpf mvvm

一方面,我的模型必须从几个文件中收集数据并构建一个面向对象的数据库,另一方面,我有我的界面,我想在其中显示数据库中的数据。所以我使用绑定但我的ComboBox等仍然是空的。我觉得我的数据库是在构建界面时被删除的。这是我在App.xaml.cs中定义的Main的代码:

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 :(得分:1)

您需要在上下文类中初始化组合框,因为当您使用XAML绑定数据上下文时,上下文类是由XAML独立创建的,Main函数中的模型创建对您的Control几乎没有影响。 您还需要在Model(ViewModel?)类中实现INotifyPropertyChanged。我也建议你进入MVVM方法。

答案 1 :(得分:0)

我认为这是一种单向约束。简短的回答是使用ObservableCollection

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

因为它会在您调用Add时通知,但您可能需要在UIDispatcher中调用它们。