【问题标题】:Caliburn.micro: Deep property change INPC catching in ViewModelCaliburn.micro:ViewModel 中捕获的深度属性更改 INPC
【发布时间】:2013-11-29 12:31:00
【问题描述】:

我有一个视图,我在其中绑定了模型的一些深层属性(使用 Caliburn.Micro 的命名约定):

查看:

   <UserControl x:Class="TOP.SomeView" 
   (...)
    <TextBox x:Name="NewFooModel_Foo" .../>

然后我需要在 ViewModel 中捕捉该属性的 INPC 的触发:

型号:

public class FooModel{


        private string _foo;
(...)

        public int Foo {
            get { return _foo; }
            set {
                if (_foo != value) {
                    _foo = value;
                    NotifyOfPropertyChange(() => Foo);
                }
            }
        }
}

从那时起,模型的属性就被正确绑定了。因此,我需要将该更改通知给 CanCreateFoo,但我不知道如何:

视图模型:

public class SomeViewModel{

(...)

      public FooModel NewFooModel {
            get { return _newFooModel; }
            set {
                if (_newFooModel != value) {
                    _newFooModel = value;
                    NotifyOfPropertyChange(() => Foo);
    //HERE I NEED TO NOTIFY TO CANCREATEFOOMODEL THAT A PROPERTY OF THE MODEL IS CHANGED
                }
            }
        }

   public bool CanCreateFooModel{
      get{
         return NewFooModel.Foo != null;
      }
   }
}

请问,有人可以帮我吗?提前致谢。

【问题讨论】:

  • 您可以在您的NewFooModel setter 中调用NotifyOfPropertyChange(() =&gt; CanCreateFooModel)...
  • 好的,但是我在不同的 ViewModel 中使用了这个 Model,所以我必须在每个 ViewModel 中创建一个 NOFC?

标签: c# wpf mvvm caliburn.micro


【解决方案1】:

您可以使用 EventAggregator 在属性更改时发布消息(以及当前 VM 的 NotifyOfPropertyChange)。 每个有兴趣的Model都可以订阅这个消息并进行处理。

【讨论】:

  • 谢谢,我还没有参与那个项​​目,但它可以帮助其他人:-)
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2013-11-21
  • 2012-05-19
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多