我是 WPF 和 C# 的新手,我试图了解如何从 BL 类更新 UI 元素(以保持逻辑和 UI 之间的分离) bl 从 c++ 网络组件获取定期更新,并且应该更新一次表单出现了一个新的论点(我在 msdn 网站上阅读过,但我想看一些具体的例子来确保我做对了)
问问题
753 次
1 回答
1
由于您从 c++ 网络组件注释中定期更新,我假设您已经有一个系统来更新您的属性。我会在视图模型类中从您的业务类中公开该属性,该类具有公共属性和ICommand
功能,专门设计用于向视图提供所有必需的数据,或者UserControl
.
老实说,我不会在商务舱中拥有那个(或任何)功能(取决于你所说的商务舱)......我个人会将它直接放入视图模型中,或者有一个经理/服务类暴露了它。
如果您坚持将其保留在原处,则必须在业务类中实现 anevent
或 a delegate
,以便该类的用户可以在值更改时收到警报。然后,您可以简单地从视图模型类将处理程序附加到您的event
/ delegate
,并在实际属性更改时轻松更新公开的属性。
所以它会有点像这样......在你的商务舱(我假设你的价值是 an int
,但如果它不正确你可以改变它......主体是相同的):
public delegate void FieldUpdate(int value);
public FieldUpdate OnFieldUpdate { get; set; }
...
private int field;
public int Field
{
get { return field; }
set
{
if (value != field)
{
field = value;
if (OnFieldUpdate != null) OnFieldUpdate(field);
}
}
}
然后在您的视图模型中:
private YourBusinessClass instance = new YourBusinessClass();
public YourBusinessClass Instance
{
get { return instance; }
set { instance = value; NotifyPropertyChanged("Instance"); }
}
附加一个处理程序:
instance.OnFieldUpdate += OnBusinessClassFieldUpdate;
...
public void OnBusinessClassFieldUpdate(int value)
{
Instance = value;
}
现在,每当业务类中的字段更新时,视图模型(和数据绑定的 UI 控件)将通过delegate
.
于 2013-10-01T09:43:34.463 回答