我在一个View模型中有一个公共变量,我希望能够从后面的另一个Views中访问(获取和设置)。我有一个MainWindowViewModel和一个SettingsViewModel。我想要能够访问此变量的代码后面已经有MainWindowViewModel的DataContext定义,我认为这可能是问题所在,因为据我所知,我无法为同一视图定义两个DataContext。
作为示例,SettingsViewModel具有一个名为LowerLimit的变量,我已将其绑定到选定的NumericUpDown值。我初始化了一个变量以将DataContext保留为SettingsViewModel,以便可以在该ViewModel中访问该变量。我是用代码完成的
var settingsContext = DataContext as SettingsViewModel;
但是由于某种原因,这会抛出NullRefereceException,表示settingsContext为null。
SettingsViewModel.cs:
public double[] LowerLimit { get; set; } = { 0, 0, 0, 0 }; //LowerLimit NumericUpDown
MainWindow.xaml.cs:
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
private void Run_Clicked(object sender, RoutedEventArgs args) //Button click event
{
...
var settingsContext = DataContext as SettingsViewModel;
lowerLimitCol = (int)settingsContext.LowerLimit[generalIndex];
}
我只提供了有关该问题的代码。如果我弄错了,并且需要更多代码来回答这个问题,那么我可以提供它。
预期结果:settingsContext从SettingsViewModel获取DataContext,允许我从MainWindow.xaml.cs访问LowerLimit变量并将其分配给本地变量。
实际结果:NullReferenceException,settingsContext为空
答案 0 :(得分:1)
您正在将DataContext
初始化为MainWindowViewModel
的实例:
DataContext = new MainWindowViewModel();
然后您尝试将DataContext
强制转换为SettingsViewModel
:
var settingsContext = DataContext as SettingsViewModel;
这显然不起作用,因为您将DataContext
设置为MainWindowViewModel
而不是SettingsViewModel
的实例。
一种解决方法是将SettingsViewModel
公开为MainWindowViewModel
的属性,以便您可以这样做:
var settingsContext = ((MainWindowViewModel)DataContext).Settings