如何为不在视图中的项目设置Caliburn Micro防护方法?

问题描述 投票:0回答:1

我正在尝试使Caliburn Micro进入我的项目,并且在不绑定到视图的属性的上下文中无法理解保护方法(Can*)(请谅解。术语错误)。

我改编了Tim Corey's example以添加此代码段:

        private bool _connected;

        public bool Connected
        {
            get { return _connected; }
            set { _connected = value; NotifyOfPropertyChange(() => Connected); }
        }

        public bool CanSayHello(bool connected)
        {
            return connected;
        }

        public void SayHello(bool connected)
        {
            Console.WriteLine("Hello!");
        }

        public bool CanClearText(string firstName, string lastName)
        {
            if (String.IsNullOrWhiteSpace(firstName) && string.IsNullOrWhiteSpace(lastName))
            {
                Connected = false;
                return false;
            }
            else
            {
                Connected = true;
                return true;
            }
        }

关联的xaml是:

        <!-- Row 4 -->
        <Button x:Name="ClearText" Grid.Row="4" Grid.Column="1">Clear Names</Button>
        <Button x:Name="SayHello" Grid.Row="4" Grid.Column="2">Say Hello</Button>

SayHello按钮从不启用(即使看起来它应该与CanClearText处于相同的状态)。目的是将Connected用作中介属性;在我整理的应用程序中,想法是Connected实际上是由外部消息(来自模型-未连接到视图)设置的。

This question有点了解,但我想避免显式调用NotifyOfPropertyChange(() => CanSayHello);,而是让Caliburn Micro框架为我完成工作。我对此很陌生,我敢肯定我缺少一些简单的东西-感谢您的帮助。

caliburn.micro
1个回答
0
投票

Caliburn Micro,在这种情况下,可能无法提供简单的解决方案。每次“连接属性”更改时,您都必须为诸如CanSayHello之类的依赖属性手动触发NotifyPropertyChanged。但是,您可以使用Fody扩展名,而无需明确输入代码即可为您做同样的事情。

例如,

[AlsoNotify(nameof(CanSayHello))]
public bool Connected
{
    get { return _connected; }
        set { _connected = value; NotifyOfPropertyChange(() => Connected); }
}

这将在代码编织的帮助下完成NotifyPropertyChanged,而无需您自己明确地这样做。

© www.soinside.com 2019 - 2024. All rights reserved.