1

我正在尝试更改我在可观察集合中拥有的对象的协调。我正在使用 MVVM 模型,并且在我的 MainViewModel 中我正在创建一个可观察的集合。在另一个视图模型中,我希望访问这个可观察的集合,但是我得到了错误:

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 回答