【问题标题】:how to referece viewmodel properties from separaete class method如何从单独的类方法中引用视图模型属性
【发布时间】:2013-05-28 22:28:11
【问题描述】:

我是新手。 我正在尝试使用 MVVM 构建 WPF 应用程序。到目前为止,我已将我的视图模型属性绑定到我的视图。相当干净漂亮。后面没有代码。

我的业务逻辑是根据用户输入启动一个或多个批处理。后台进程将依次更新视图的进程栏和/或文本块上的状态。

我的问题是 执行此操作的最 MVVM 方式是什么? 我应该将批处理代码直接放在我的视图模型类中吗?如果是,我的视图模型类看起来很大(数千行)

或者我应该在 BusinessLogic 文件夹(层)中创建一个单独的类来容纳批处理逻辑吗?如果是这样,我如何在业务逻辑类中为输入/输出引用视图模型 (UI) 属性?只需将这些属性作为参数传递给业务逻辑类/方法?如果是这样,看起来我必须将很多属性作为参数传递。这是常见的 MVVM 方式吗?

请指引我正确的方向。 谢谢,

【问题讨论】:

    标签: wpf c#-4.0 mvvm


    【解决方案1】:

    处理逻辑不应该进入视图模型,但视图模型将“知道”如何启动进程,可能通过实例化一些组件并调用其上的方法,传递用户指定的任何参数在用户界面中。

    执行处理的组件可以发出状态事件(消息、完成百分比或两者)。视图模型可以订阅这些事件(并在处理完成时取消订阅),并相应地更新其属性。

    例如,您可能有这样的视图模型属性:

    public string StatusMessage
     {
        get { return _statusMessage; }
        set 
        {
            _statusMessage = value;
            RaisePropertyChanged("StatusMessage"); // you need to implement INotifyPropertyChanged
        }
    }
    

    执行处理的组件可能会以 10% 的完成间隔发出一个事件,并在发生错误时发出另一个事件。您可以在视图模型中订阅这些事件,并将 StatusMessage 属性设置为“处理中 - 30% 完成”或“处理因超时而失败”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多