1

このコンストラクターを使用して、このオブジェクトを初期化しました

 ObservableCollection<MyHomeworkModel> allTabs = new ObservableCollection<MyHomeworkModel>();

初期化後に allTabs が null であることが判明しました。そのため、MyHomeworkModel オブジェクトを追加できませんでした。

私を助けてください、そして前もって感謝します。

using System.Windows.Input;
using System.Collections.ObjectModel;
using MyHomework;

namespace MyHomework__MVVM_
{
    class MyHomeworkViewModel
    {
        private ObservableCollection<MyHomeworkModel> allTabs;
        private MyHomeworkModel selectedTab;

        public MyHomeworkViewModel()
        {
            ObservableCollection<MyHomeworkModel> allTabs = new ObservableCollection<MyHomeworkModel>();
            selectedTab = new MyHomeworkModel();
            AddCourseCommand = new AddCourseCommand(this);
        }

        public ObservableCollection<MyHomeworkModel> AllTabs
        {
            get
            {
                return allTabs;
            }
            set
            {
                allTabs = value;
            }
        }

        public MyHomeworkModel SelectedTab
        {
            get
            {
                return selectedTab;
            }
            set
            {
                selectedTab = value;
            }
        }

        public ICommand AddCourseCommand
        {
            get;
            private set;
        }

        public void AddNewTab()
        {
            NewCourseName ncn = new NewCourseName();
            ncn.ShowDialog();
            if (ncn.courseName != null)
            {
                MyHomeworkModel newTab = new MyHomeworkModel();
                newTab.Header = ncn.courseName;
                AllTabs.Add(newTab);
            }
        }
    }
}
4

5 に答える 5

3

ここ(のコンストラクター内MyHomeworkViewModel):

ObservableCollection<MyHomeworkModel> allTabs = new ObservableCollection<MyHomeworkModel>();

クラス メンバーをシャドウするローカル変数を作成すると、コンストラクターの呼び出し後も null のままになります。それを避けるには、ステートメントの先頭にある型を単純にスキップします。

allTabs = new ObservableCollection<MyHomeworkModel>();
于 2013-01-18T15:34:14.273 に答える
1

作成する場合

ObservableCollection<MyHomeworkModel> allTabs = new ObservableCollection<MyHomeworkModel>();

コンストラクターでは、不足すると削除されます。それを外部で宣言し、その呼び出しだけ

allTabs = new ObservableCollection<MyHomeworkModel>();
于 2013-01-18T15:33:23.237 に答える
1
 public MyHomeworkViewModel()
    {
        allTabs = new ObservableCollection<MyHomeworkModel>();
        selectedTab = new MyHomeworkModel();
        AddCourseCommand = new AddCourseCommand(this);
    }
于 2013-01-18T15:33:40.287 に答える
0

これが、プライベート クラス変数の前にアンダースコアを付ける C# 規則の 1 つの理由です。

private ObservableCollection<MyHomeworkModel> _allTabs;

詳細なガイドラインはこちら: http://msdn.microsoft.com/en-gb/library/vstudio/ms229042%28v=vs.100%29.aspx

于 2013-01-18T15:59:09.927 に答える
0

この行ObservableCollection<MyHomeworkModel> allTabs = new ObservableCollection<MyHomeworkModel>();は、フィールドを新しいコレクションに設定するのではなく、新しいローカル変数を作成し、そのローカル変数を新しいコレクションに設定しています。フィールドを初期化するには、その行を次のように変更する必要があります。allTabs

allTabs = new ObservableCollection<MyHomeworkModel>();
于 2013-01-18T15:33:28.190 に答える