【问题标题】:Stylet Button not enabling when its CanX property returns true当 CanX 属性返回 true 时 Stylet Button 未启用
【发布时间】:2020-11-17 06:18:26
【问题描述】:

使用Stylet

我正在使用带有 dotnet core 3.1 的默认 Stylet 模板。 我只是添加了一个重现问题的属性/方法。

<TextBox Text="{Binding Username, 
                Mode=TwoWay, 
                UpdateSourceTrigger=PropertyChanged}" 
         Width="100" Height="100"/>

<Button Command="{s:Action Do}">Foo</Button>
public class ShellViewModel : Screen
{
    public string Username { get; set; }

    public void Do() { }

    public bool CanDo => !string.IsNullOrWhiteSpace(Username);
}

CanDo 属性上的断点被击中一次,再也不会被击中。在调用set 时更改TextBox 中的值不会重新触发CanDo 属性。

我也尝试使用 SetAndNotify 的支持字段,但无济于事:

public string Username { get => username; set => SetAndNotify(ref username, value, nameof(Username)); }

【问题讨论】:

    标签: c# wpf stylet


    【解决方案1】:

    我意识到我缺少属性更改通知。通过我看到的所有示例,我认为这是 Stylet 为我隐式处理的。

    将我的属性设置器更改为以下内容后,它按预期工作。

    public string Username
    {
        get => _username;
        set
        {
            SetAndNotify(ref _username, value);
            NotifyOfPropertyChange(() => CanLogin);
        }
    }
    

    【讨论】:

      【解决方案2】:

      PropertyChangedBase 还注意与 Fody.PropertyChanged 集成。 Fody.PropertyChanged 引发的通知是使用 PropertyChangedDispatcher 引发的。

      因此,您无需执行任何特殊操作即可将 Fody.PropertyChanged 与 Screen、ValidatingModelBase 或 PropertyChangedBase 的任何子类一起使用。

      这是来自 Stylet Document wiki。如果一个项目使用 Fody.PropertyChanged,那么它不必手动编写 NotifyOfPropertyChange(),这可能是您在示例代码中没有看到 NotifyOfPropertyChange() 的原因。

      Fody.PropertyChanged 是一个很棒的包,试试吧,它为我节省了数百万次击键:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多