【问题标题】:How do you set up Caliburn Micro guard methods for items not in the view?您如何为不在视图中的项目设置 Caliburn Micro 保护方法?
【发布时间】:2020-06-01 18:10:07
【问题描述】:

我正试图让 Caliburn Micro 进入我的项目,但在未绑定到视图的属性的上下文中,我无法理解保护方法 (Can*)(如果我得到,请原谅我我的术语错了)。

我已经改编 Tim Corey's example 来添加这个 sn-p:

        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(() =&gt; CanSayHello); 并让 Caliburn Micro 框架为我完成工作。我对此很陌生,我敢肯定我缺少一些简单的东西——感谢您的帮助。

【问题讨论】:

    标签: caliburn.micro


    【解决方案1】:

    Caliburn Micro,在这种特殊情况下,可能无法提供简单的解决方案。每次 Connected Property 更改时,您都必须为 CanSayHello 等依赖属性手动触发 NotifyPropertyChanged。但是,您可以使用 Fody 扩展,它可以为您做同样的事情,而无需显式输入代码。

    例如,

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多