Question

Actuellement, mon modèle a dix propriétés qui, pour ce faire, seront appelées AnnualizedRate1 , AnnualizedRate2 , ..., AnnualizedRate10 , qui sont révélé aux vues dans le modèle de vue via dix propriétés Taux1 , Taux2 , ..., Taux10 . L'un de mes points de vue montre ces valeurs dans un DataGrid . C'est terriblement répétitif et il est difficile de s'adapter à l'évolution des besoins. Il doit y avoir un meilleur moyen que le suivant.

Modèle ( MyModel ):

public decimal AnnualizedRate1 { get { return this.AnnualizedRate(1); } }
public decimal AnnualizedRate2 { get { return this.AnnualizedRate(2); } }
...
public decimal AnnualizedRate10 { get { return this.AnnualizedRate(10); } }

MyModel.AnnualizedRate est

public decimal AnnualizedRate(int i);

Modèle de vue ( MyViewModel ):

public decimal Rate1 { get { return myModel.AnnualizedRate1; } }
public decimal Rate2 { get { return myModel.AnnualizedRate2; } }
...
public decimal Rate10 { get { return myModel.AnnualizedRate10; } }

Afficher ( MyView ):

xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
...
    <dg:DataGrid>
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn
                Header="Rate1" 
                Binding="{Binding Rate1, StringFormat=P}"
                IsReadOnly="True"/>
            <dg:DataGridTextColumn
                Header="Rate2" 
                Binding="{Binding Rate2, StringFormat=P}"
                IsReadOnly="True"/>
            ...
            <dg:DataGridTextColumn
                Header="Rate10" 
                Binding="{Binding Rate10, StringFormat=P}"
                IsReadOnly="True"/>
        </dg:DataGrid.Columns>
    </dg:DataGrid>

Quelqu'un a-t-il des idées?

Était-ce utile?

La solution

Je voudrais utiliser et ObservableCollection pour stocker les données et lier la grille.

Autres conseils

Voici le code pour faire ce que RB Davidson a dit de faire. Lorsque vous trouvez que cela fait ce que vous vouliez, donnez-lui un crédit. Sa réponse est correcte.

Dans votre modèle de vue:

public class AnnualizedRateViewModel
{
     public string Name { get; set; }
     public decimal Rate { get; set; }
}

public MyViewModel : INotifyPropertyChanged
{

public MyViewModel()
{
     AnnualizedRates = new ObservableCollection<AnnualizedRateViewModel>();
     //I'd recommend your model having a GetAllRates() function rather than this,
     //but for demo purposes, this works
     for(int i = 1; i <= 10; i++)
     {
          AnnualizedRates.Add(new AnnualizedRateViewModel()
          {
               Name = string.Format("Rate {0}", i),
               Rate = MyModel.AnnualizedRate(i)
          });
     }
}

private ObservableCollection<int> _annualizedRates;
public ObservableCollection<int> AnnualizedRates
{
     get { return _annualizedRates; }
     set
     {
          _annualizedRates = value;
          //Raise OnNotifyPropertyChanged event from your
          //implementation of INotifyPropertyChanged in your viewmodel
          //the full implementation of this is outside the scope of this demo
     }
}

}

À partir de là, vous utiliseriez la liaison de données pour créer les colonnes dans votre vue. Vous souhaitez vous connecter à cette collection de taux annualisés. Comme WPF Toolkit ne vous facilite pas la tâche, vous devrez écrire un convertisseur de valeur pour convertir le ObservableCollection & Annual DirectoryRateViewModel > en un ObservableCollection < DataGridColumn > . . p>

<dg:DataGrid AutoGenerateColumns="false" Columns="{Binding AnnualizedRates, ValueConverter={StaticResource AnnualizedRatesToDataGridColumnCollectionConverter}}">
</dg:DataGrid>

Ce que vous devez apprendre ici, c’est lorsque vous pensez à vous-même "répétition", essayez plutôt de penser à "collection".

Bonne chance ... et encore, crédit RB Davidson.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top