我是WPF和C#的新手,试图了解如何从BL类更新UI元素(以保持逻辑和UI之间的分离)bl从c ++网络组件获得定期更新并应更新这个表格一旦出现一个新的论点(我在msdn网站上阅读,但我想看一些具体的例子,以确保我做对了)
答案 0 :(得分:1)
由于从c ++网络组件获得定期更新评论,我假设您已经有一个系统来更新您的媒体资源。我将在视图模型类中公开您的业务类中的该属性,该类具有公共属性和ICommand
函数,专门用于向视图提供所有必需的数据,或UserControl
。
老实说,我不会在商务舱中拥有那种(或任何)功能(取决于你所说的商务舱)......我个人将其直接放入视图模型中,或者有一位经理/暴露它的服务类。
如果您坚持将其保留在原来的位置,则必须在您的商务舱中实施event
或delegate
,以便可以提醒该类别的用户何时价值变化。然后,您只需从视图模型类中将一个处理程序附加到event
/ delegate
,并在实际属性发生更改时轻松更新公开的属性。
所以它会在你的商务舱中出现类似的东西......(我假设你的价值是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
自动更新。