从视图的代码隐藏中绑定MvvmCross

时间:2013-08-07 10:19:29

标签: xaml mvvm windows-runtime mvvmcross

对于XAML视图,我将它挂钩到this.ViewModel.PropertyChanged,如此:

ViewModel.PropertyChanged += (s, e) =>
{
    if (e.PropertyName == "CurrentImage")
        DoStuff();
};

这是因为XAML不够灵活,无法在没有代码隐藏的情况下直接实现我喜欢的东西,也因为它的代码纯粹与WinRT / XAML相关而不是核心便携式项目。

但是在视图的构造函数中,ViewModel属性为null,因此可以解决这个问题:

this.Loaded += (s2, e2) =>
ViewModel.PropertyChanged += (s, e) =>
{
    if (e.PropertyName == "CurrentImage")
        DoStuff();
};

我认为这(除了使用字符串来引用属性)可能不是很干净,并且可能应该有更好的方法来实现我喜欢的东西。有更理想的方法吗?

2 个答案:

答案 0 :(得分:3)

这可以使用MvxPropertyChangedListener完成,如Stuart's comment中所述:

new MvxPropertyChangedListener(ViewModel).Listen<TOfProperty>(
    () => ViewModel.SomeProperty,
    () =>
    {
        // Do something
    });

答案 1 :(得分:2)

是的,有更好的方法。通常,人们使用Josh Smith的PropertyObserver

这是我第一次听说过MvvmCross。我开发了自己的跨平台MVVM框架,其中包含一个与Josh Smith的PropertyObserver具有相同功能的类。我想知道MvvmCross是否也没有这样的东西。