Вот код для выполнения того, что сказал Р.Б. Дэвидсон. Когда вы обнаружите, что это делает то, что вы хотели, пожалуйста, дайте ему кредит. Его ответ правильный.
В вашей ViewModel:
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
}
}
}
Оттуда вы фактически используете привязку данных для создания столбцов в вашем представлении. Вы бы связались с этой коллекцией AnnualizedRates. Поскольку WPF Toolkit не делает это простым, вам придется написать конвертер значений для преобразования ObservableCollection<AnnualizedRateViewModel>
в ObservableCollection<DataGridColumn>
.
<dg:DataGrid AutoGenerateColumns="false" Columns="{Binding AnnualizedRates, ValueConverter={StaticResource AnnualizedRatesToDataGridColumnCollectionConverter}}">
</dg:DataGrid>
Здесь вы должны изучить то, что вы думаете о себе как «повторение», попробуйте вместо этого подумать «коллекция».
Удачи ... и снова, кредит РБ Дэвидсон.