2012-05-31 46 views
0

Im将应用程序从Windows窗体迁移到WPF,所以我尝试使用MVVM模式,但它对我来说有点棘手。如何在这种情况下正确应用MVVM?

在Windows窗体我有一个包含已定义了一些新的方法,让我来执行步骤的进度形式,将其值设置等,这代码放置在进度条的代码背后如下:

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")); 
    } 
} 

我的视图模型:

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我已经创建了我的新进度控制及其容器的形式,即使我一直在阅读有关MVVM的知识,但我不知道我必须在哪里放置Method0X的代码,因为根据我读过的内容,我必须将该代码放入vi ewModel,但是,这里还有一个问题:我怎么能从我的视图模型访问我的进度条,因为它在另一个表单中?

希望有人能帮助我。提前致谢。

+0

什么是Method01,2,3应该做什么? –

+1

我认为这篇文章对你有好处:http://stackoverflow.com/questions/1619505/wpf-openfiledialog-with-the-mvvm-pattern – dugas

+0

@DaveHillier,因为我有一个listView,Method0X允许我插入直接行,将内容复制到剪贴板,在progressBar中执行一个步骤等 – Dante

回答

2

听起来像您控制的方法用于设置控件的状态。你可以使用dependency properties来做到这一点。

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

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

然后在XAML中添加绑定

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

设置您的视图的数据上下文到一个新的视图模型。 CurrentProgress是视图模型上的一个属性。 在您的视图模型上实现INotifyPropertyChanged

若要添加和删除控件,您可能需要ObservableCollection

相关问题