2012-05-31 2 views
0

Lorsque je migre une application de Windows Forms vers WPF, j'essaie d'utiliser le modèle MVVM, mais cela devient un peu compliqué pour moi.Comment appliquer MVVM correctement dans ce cas?

Dans Windows Forms I ont une forme qui contient une barre de progression qui a défini de nouvelles méthodes qui me permettent d'exécuter les étapes, définir sa valeur, etc. Ce code est placé dans le code de la barre de progression derrière comme ci-dessous:

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

    public void Method01() 
    {...} 

    public void Method02() 
    {...} 

    public void Method03() 
    {...} 
} 

Le code de Method01, Method02 et Method03 est utilisé dans le conteneur, alors, voici ma question: Dans WPF, puisque j'utilise le modèle MVVM, Où dois-je placer ce code ??

Jusqu'à présent, j'ai cette classe:

Mon modèle:

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

Mon 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();     
     } 
    } 
} 

Dans WPF, je l'ai déjà créé mon nouveau contrôle ProgressBar et sa forme de récipient, même j'ai lu sur MVVM mais je ne comprends pas où dois-je mettre le code de Method0X, parce que, selon ce que j'ai lu, je devrais mettre ce code dans le vi ewModel, mais, voici un autre problème: Comment pourrais-je avoir accès à ma barre de progression à partir de mon modèle de vue, car il est dans un autre formulaire?

J'espère que quelqu'un peut m'aider. Merci d'avance.

+0

Que sont supposés faire les méthodes01,2,3? –

+1

Je pense que ce post sera bénéfique pour vous: http://stackoverflow.com/questions/1619505/wpf-openfiledialog-with-the-mvvm-pattern – dugas

+0

@DaveHillier, Depuis que j'ai un listView soit Method0X permettez-moi d'insérer lignes directement, copier le contenu dans le presse-papiers, effectuer une étape dans la barre de progression, etc – Dante

Répondre

2

Il semble que les méthodes sur votre contrôle sont utilisées pour définir l'état de votre contrôle. Vous pouvez utiliser dependency properties pour ce faire.

Vous utilisez la liaison pour connecter votre vue à votre modèle de vue.

Créez une propriété pour la progression de vos contrôles.

Puis en XAML ajouter une liaison

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

Définir le contexte de données de votre point de vue d'un nouveau modèle de vue. CurrentProgress est une propriété du modèle de vue. Implémentez INotifyPropertyChanged sur votre modèle de vue.

Pour ajouter et supprimer des éléments de votre contrôle, vous pouvez ObservableCollection.

Questions connexes