【问题标题】:Static Property calling non-static method in WPF静态属性在 WPF 中调用非静态方法
【发布时间】:2016-11-17 02:12:45
【问题描述】:

我有多个 ViewModel 并在所有这些中使用 ViewModelBase 作为抽象类。我想从另一个类中获取当前属性值。创建一个实例是不可取的,使属性静态得到我想要的。但是,这样做我失去了 INotifyPropertyChange Im 与 ViewModelBase.Set() 一起使用,因为 Set() 是一种非静态方法。

有什么替代方法可以让我获得属性值,但仍然可以在 MVVM 中保留 ViewModelBase 的好处?

public class SampleViewModel : ViewModelBase
{
   private static bool _sample;
   public SampleViewModel()
   {
   }
   public static bool GetValue
   {
      get { return _sample; }
      set { Set(ref _sample, value); }
   }
}

public class MyClassViewModel : ViewModelBase
{
   public MyClassViewModel()
   {
      bool myValue = SampleViewModel.GetValue;
   }
}

【问题讨论】:

  • 为什么不想创建实例变量?静态意味着它与实例没有任何关系。您的静态属性与您的实例完全无关吗?如果是这样,您的设计存在缺陷,因为设置为静态
  • 不要使用静态属性。你有主 ViewModel 吗?
  • @EmrahSüngü 通过创​​建实例变量,我错过了当前数据,因为它已经设置好了。如果有办法引用该实例,它将得到我想要的。
  • @Bigeyes 我有一个主视图模型
  • 如果已经设置了,那为什么不把已经设置的数据传递给你的实例变量呢?

标签: c# wpf mvvm-light


【解决方案1】:

ParentVM 创建一个 ChildVM,通过 ChildVM 属性公开它 ParentView 处理生成的 PropertyChanged 事件,创建一个 ChildView,将其 DataContext 设置为 ChildVM。

here for details.

use MVVM Light Toolkit's Messaging Services to pass values to view Models.。但我不喜欢它。

【讨论】:

猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 2013-02-13
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多