【发布时间】:2019-05-14 11:41:12
【问题描述】:
我正在开发一个用于数据管理的 C# WPF 应用程序。我将 MVVM 模式与 Caliburn Micro 框架一起使用。
我有一个按钮,只有在某个名称为空的文本框不为空时才能按下。
我的问题是,当我在文本框中输入文本时,CanSaveSelection 不会收到通知,因此不会检查它是否为空。
public class MainWorkspaceViewModel : PropertyChangedBase
{
private Car _myCar;
public Car MyCar
{
get { return _myCar; }
set
{
_myCar = value;
NotifyOfPropertyChange(() => CanSaveSelection);
}
}
public void SaveSelection()
{
//Do something
}
public bool CanSaveSelection
{
get
{
bool result = true;
if (String.IsNullOrWhiteSpace(MyCar.Manufacturer.Name))
{
result = false;
}
return result;
}
}
}
对象:
public class Car : PropertyChangedBase
{
public Manufacturer Manufacturer { get; set; }
}
public class Manufacturer : PropertyChangedBase
{
public String Name { get; set; }
}
有没有办法让 NotifyOfPropertyChange 认为对象“冒泡”? 我认为另一种方法是使用事件聚合器,但我对此知之甚少。
【问题讨论】:
-
“特定文本框”绑定的源属性在哪里定义?
-
@mm8 文本框绑定的属性是 Manufacurer 类的 Name 属性。所以在这种情况下,绑定路径将是: Path = MyCar.Manufacturer.Name
-
Manufacturer类是否实现了INotifyPropertyChanged接口? -
@mm8 我看到我在我的问题中忘记了一些东西,我编辑了它。是的,他们确实间接认为 PropertyChangedBase 基类。
-
如果您可以忍受该按钮仍处于启用状态,则可以删除 canSave。在 Save 中,只需检查有一个 Name 并从方法中返回 f 没有。或者您可以绑定一个命令,该命令将根据用户输入重新评估 canexecute。也许 Caliburn Micro 不适合您的项目要求。
标签: c# wpf data-structures data-binding caliburn.micro