Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM WPF的主结构_C#_Wpf_Mvvm - Fatal编程技术网

C# MVVM WPF的主结构

C# MVVM WPF的主结构,c#,wpf,mvvm,C#,Wpf,Mvvm,一方面,我有我的模型,它必须从几个文件中收集数据并构建一个面向对象的数据库,另一方面,我有我的界面,我想在其中显示数据库中的数据。所以我使用绑定,但我的组合框等。。保持空着。我有一种感觉,我的数据库是建立的,然后在界面启动时被删除。以下是我在App.xaml.cs中定义的Main的代码: public partial class App : Application { [STAThread] public static void Main() { var

一方面,我有我的模型,它必须从几个文件中收集数据并构建一个面向对象的数据库,另一方面,我有我的界面,我想在其中显示数据库中的数据。所以我使用绑定,但我的组合框等。。保持空着。我有一种感觉,我的数据库是建立的,然后在界面启动时被删除。以下是我在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; }
        }

您需要在上下文类内初始化combobox,因为当您使用XAML绑定数据上下文时,上下文类是由XAML独立创建的,Main函数中的模型创建实际上对您的控件没有影响。
您还需要将InotifyProperty更改为您的模型ViewModel?班我还建议您采用MVVM方法。

我认为这是一种单向绑定。一个简单的答案是使用ObservableCollection

私有可观测集合_criteres=新可观测集合


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

有什么问题?你希望代码能实现什么?我希望在构建数据库后,界面能够提取其中的一些数据并显示出来。但是,当我尝试将组合框绑定到我的项目的一个类属性时,它仍然为空。然后发布您尝试绑定组合框的代码。好了,完成了,如果您还需要什么,请告诉我好的,我理解,谢谢您的回复。我在MainWindow.xaml.cs中创建了我的模型,效果很好@NicolasPeuzin那不是很好。您只需更改将dataContext设置为Window的方法。不要在xaml中进行内部设置,而是在创建窗口的外部进行。您建议我在my main?App.xaml中设置main窗口的dataContext。cs@Asw如果你坚持列表,我认为应该改为INotifyCollectionChanged?我建议使用ObservableCollection而不是List,并为TThank you的每个属性实现INotifyPropertyChanged。我可以拥有一个带有列表的双向绑定吗?您可以,declear ItemsSource={binding Stations,Mode=TwoWay}并实现INotifyPropertyChanged。但一般来说,ComboBox不需要双向绑定,因为默认情况下用户无法更改该项。但是,如果您有一个项目的自制数据模板,这是可能的。您是对的。要获得用户的选择,我可以使用ComboBox.SelectedItemProperty,您应该在初始化后尝试更新列表,您会明白我的意思。除非再次绑定列表,否则UI不会更改。