【问题标题】:How to access ViewModel property(value) in another ViewModel?如何访问另一个 ViewModel 中的 ViewModel 属性(值)?
【发布时间】:2012-11-19 10:15:25
【问题描述】:

我有一个这样的 ViewModel:

public class TaskTrayViewModel<T> : ViewModelBase where T : IBlotterRow, new()
{ }

这个 ViewModel 包含一个属性:

private Product sp;
public Product selectedProduct
{
   get { return sp; }
   set
   {
    sp = value; 
   }

}

我想在 BlotterCriteriaViewModel(其他 viewModel)中访问这个属性(值)。所有的视图模型都实现了 InotiFyPropertyChange。我已经阅读了一些相关的问题,但没有得到任何东西。我没有使用框架(prism、galasoft)?

如何在这里传递属性(值)?请推荐>

【问题讨论】:

标签: wpf visual-studio-2010 c#-4.0 mvvm


【解决方案1】:

好的,至少有两种方法。

  1. 直接方式:BlotterCriteriaViewModel 的实例获取对TaskTrayViewModel 实例的引用(在构造时,或者在需要值的点)。有了TaskTrayViewModel 引用,就可以轻松访问公共属性。
  2. 间接方式:BlotterCriteriaViewModel的实例从TaskTrayViewModel获取INotifyPropertyChange引用并订阅PropertyChanged事件。你不会得到属性的initial值,但是一旦属性发生变化,你就会得到事件并且可以在事件参数中看到新的值。

这些有问题吗?

【讨论】:

  • 以直接方式..如何将对 TaskTrayViewModel 实例的引用作为 TaskTrayViewModel : ViewModelBase where T : IBlotterRow, new() 传递给 BlotterCriteriaViewModel 的实例。尝试错误 - 必须是具有公共无参数构造函数的非抽象类型才能将其用作泛型类型或方法中的参数“T”。请提出实施建议?
  • @Tarun:你能发布失败的代码吗?你用什么T?你不是已经有一个实际的实例了吗?
  • 在 BlotterCriteriaViewModel 中..我正在做类似 public TaskTrayViewModel TaskViewModel { get;放;其中 T = 其中 T :IBlotterRow,new()。我无法创建“TaskViewModel”,因为错误即将到来“必须是具有公共无参数构造函数的非抽象类型才能将其用作泛型类型或方法中的参数'T'。”
  • 嗯。 BlotterCriteriaViewModel 是通用的吗?在这种情况下,T 是什么?
  • BlotterCriteriaViewModel 不是通用的,但 TaskTrayViewModel 是。其中 T : IBlotterRow, new()
猜你喜欢
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
相关资源
最近更新 更多