2012-05-31 77 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

相關問題