0

我是 WPF 和 C# 的新手,我试图了解如何从 BL 类更新 UI 元素(以保持逻辑和 UI 之间的分离) bl 从 c++ 网络组件获取定期更新,并且应该更新一次表单出现了一个新的论点(我在 msdn 网站上阅读过,但我想看一些具体的例子来确保我做对了)

4

1 回答 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 回答