[英]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.