gpt4 book ai didi

c# - CanExecute Caliburn 方法不适用于嵌套属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:01 29 4
gpt4 key购买 nike

我正在尝试使用 Caliburn Micro CanExecute 方法根据是否在文本框中输入值来绑定(bind)我的保存按钮是否被禁用。

这是我的看法:

<TextBox Text="{Binding Current.Name}"/>
<Button Content="Save" Name="Save" />

我的POCO:

[ImplementPropertyChanged] (fody)
public partial class POCO: IEntity
{
public int Id { get; set; }
public string Name { get; set; }
}

还有我的 ViewModel:

public void SetupViewModel()
{
Current = new POCO();
}

public POCO Current { get; set; }

public bool CanSave => Current == null || !string.IsNullOrWhiteSpace(Current?.Name);

如果我设置一个变量并将其绑定(bind)到 View 中(让我们称之为 POCOName)并将其传递给 CanSave 它工作正常,似乎只是一个问题具有嵌套属性。有人有什么想法吗?

最佳答案

Action 约定功能使用 x:Name 指令而不是 Name 属性。

<TextBox Text="{Binding Current.Name}"/>
<Button Content="Save" x:Name="Save" />

更新
我已经尝试使用 Name 属性,它也可以工作,很抱歉给了你错误的信息。

在您的情况下,CanExcute 方法实际上是一个属性,例如,您需要通知属性已更改。

public string Name
{
get { return _name; }
set
{
_name = value;
NotifyOfPropertyChange(nameof(Name));
// when Name changed, check if it is null or whitespace
NotifyOfPropertyChange(nameof(CanSave));
}
}

这取决于您的应用程序通知 CanExcute 属性更改的位置。
您也可以使用 CanExcute 方法,每次参数值改变时都会调用它。
有关 Caliburn Micro Action 的更多信息,请参阅 All About Actions

关于c# - CanExecute Caliburn 方法不适用于嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784858/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com