簡體   English   中英

當 CanX 屬性返回 true 時 Stylet Button 未啟用

[英]Stylet Button not enabling when its CanX property returns true

使用樣式

我正在使用帶有 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)); }

我意識到我缺少屬性更改通知。 通過我看到的所有示例,我認為這是由 Stylet 為我隱式處理的。

將我的屬性設置器更改為以下內容后,它按預期工作。

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

PropertyChangedBase 還注意與 Fody.PropertyChanged 集成。 Fody.PropertyChanged 引發的通知是使用 PropertyChangedDispatcher 引發的。

因此,您無需執行任何特殊操作即可將 Fody.PropertyChanged 與 Screen、ValidatingModelBase 或 PropertyChangedBase 的任何子類一起使用。

這是來自 Stylet Document wiki。 如果一個項目正在使用 Fody.PropertyChanged,那么它不必手動編寫 NotifyOfPropertyChange(),這可能是您在示例代碼中沒有看到 NotifyOfPropertyChange() 的原因。

Fody.PropertyChanged 是一個很棒的 package,試試吧,它為我節省了數百萬次擊鍵:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM