在这种情况下如何正确应用MVVM?

时间:2012-05-31 22:36:16

标签: c# wpf mvvm

我正在将应用程序从Windows窗体迁移到WPF,所以我尝试使用MVVM模式,但这对我来说有点棘手。

在Windows窗体中,我有一个包含progressBar的表单,它定义了一些允许我执行步骤,设置其值等的新方法。此代码放在progressBar的代码后面,如下所示:

public class MyProgressBar : ProgressBar
{
    public MyProgressBar ()
    {
        InitializeComponent();
    }

    public void Method01()
    {...}

    public void Method02()
    {...}

    public void Method03()
    {...}
}

Method01,Method02和Method03的代码在容器形式中使用,所以,这是我的问题:在WPF中,因为我使用MVVM模式,我在哪里放置代码?

到目前为止,我有这个课程:

我的模特:

public class MyFormModel : DataTable
{
    public OutputResultsDataTable()
        : base()
    {
        Columns.Add(new DataColumn("Number"));
        Columns.Add(new DataColumn("Message"));
        Columns.Add(new DataColumn("Detail"));
    }
}

我的ViewModel:

public class MyNewWPFForm
{
    /// <summary>
    /// 
    /// </summary>
    public MyFormModel MyData{ get; set; }

    /// <summary>
    /// Constructor
    /// </summary>
    public MyNewWPFForm()
    {
        if (System.Windows.Application.Current.MainWindow != null)
        {
            MyData= new MyFormModel ();                
        }
    }
}

在WPF中,我已经创建了我的新progressBar控件及其容器形式,即使我一直在阅读有关MVVM的内容,但我无法理解我在哪里放置Method0X的代码,因为根据我读过的内容,我必须将该代码放在viewModel中,但是,这是另一个问题:我怎么能从我的视图模型访问我的进度条,因为它在另一个表单中?

希望有人可以帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

听起来您的控件上的方法用于设置控件的状态。您可以使用dependency properties执行此操作。

您使用绑定将视图连接到视图模型。

为控件进度创建一个属性。

然后在Xaml中添加一个绑定

<MyProgressBar Progress="{Binding CurrentProgress}" />

将视图的数据上下文设置为新的视图模型。 CurrentProgress是视图模型上的属性。 在您的视图模型上实施INotifyPropertyChanged

要向控制中添加和删除内容,您可以ObservableCollection