1

監視可能なコレクションにあるオブジェクトの調整を変更しようとしています。私は MVVM モデルを使用しており、MainViewModel で監視可能なコレクションを作成しています。別のviewModelで、この監視可能なコレクションにアクセスしたいのですが、エラーが発生します:

An object reference is required for the non-static field, method, or property

私の問題は、観察可能なコレクションを静的に変更すると、アプリケーションに観察可能なコレクションを追加する方法が原因で、新しいエラーが発生することです。では、静的部分を回避して監視可能なコレクションにアクセスする方法はありますか?

Observable コレクションが作成されるコード:

   public ObservableCollection<CastleViewModel> CastlesInPlay { get; set; }
CastlesInPlay = new ObservableCollection<CastleViewModel>
        {
           (Adding parameters for CastlesInPlay)
        };

監視可能なコレクションにアクセスしたいコード:

  MainViewModel.CastlesInPlay[0].... = ...;
       MainViewModel.CastlesInPlay[0].... = ..;

どちらのクラスも ViewModels ですが、castleInPlay をビューに追加するときは、ビュー コードの背後に移動して追加します。

    private void AddCastle(CastleViewModel castleVM)
    {
        canvasCountries.Children.Add(new CastleUserControl() { DataContext = castleVM });
    }

    private void RemoveCastle(CastleViewModel castleVM)
    {
        canvasCountries.Children.Remove(canvasCountries.Children.Single(x => ((x as CastleUserControl).DataContext as CastleViewModel) == castleVM));
    }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        MainViewModel vm = ((MainViewModel)DataContext);

        vm.CastlesInPlay.ToList().ForEach(x => AddCastle(x));
        vm.AddCastleAction = x => AddCastle(x);
        vm.RemoveCastleAction = x => RemoveCastle(x);
    }
4

1 に答える 1

2

CastlesInPlay静的ではありません。したがって、クラスにアクセスするには、クラスのインスタンスを提供する必要があります。

var mainViewModel = new MainViewModel();
mainViewModel.CastlesInPlay ...;

次のように静的にアクセスしています(これは間違っています):

MainViewModel.CastlesInPlay ...;
于 2013-11-15T10:33:04.643 に答える