【问题标题】:How to access public variables from another View Model如何从另一个视图模型访问公共变量
【发布时间】:2019-06-28 14:46:13
【问题描述】:

我在一个视图模型中有一个公共变量,我希望能够从另一个视图代码隐藏中访问(获取和设置)。我有一个 MainWindowViewModel 和一个 SettingsViewModel。我希望能够访问此变量的代码隐藏已经有 MainWindowViewModel 的 DataContext 定义,我认为这可能是问题所在,因为据我所知,我无法为同一个视图定义两个 DataContext。

例如,SettingsViewModel 有一个名为 LowerLimit 的变量,我已将其绑定到 NumericUpDown 的选定值。我初始化了一个变量以将 DataContext 保存为 SettingsViewModel,以便我可以访问该 ViewModel 中的变量。我用代码做到了这一点

var settingsContext = DataContext as SettingsViewModel;

但由于某种原因,这会抛出 NullRefereceException,说 settingsContext 为空。

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 为空

【问题讨论】:

    标签: datacontext avaloniaui


    【解决方案1】:

    您正在将您的DataContext 初始化为MainWindowViewModel 的实例:

    DataContext = new MainWindowViewModel();
    

    然后您尝试将DataContext 转换为SettingsViewModel

    var settingsContext = DataContext as SettingsViewModel;
    

    这显然行不通,因为您将DataContext 设置为MainWindowViewModel 的实例而不是SettingsViewModel

    解决此问题的一种方法是将您的 SettingsViewModel 公开为 MainWindowViewModel 的属性,以便您可以这样做:

    var settingsContext = ((MainWindowViewModel)DataContext).Settings
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2021-09-24
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2013-02-01
      • 2012-04-22
      相关资源
      最近更新 更多