質問
現在、私のモデルには10個のプロパティがあり、ここではここでは AnnualizedRate1
、 AnnualizedRate2
、...、 AnnualizedRate10
を呼び出します。 10個のプロパティ Rate1
、 Rate2
、...、 Rate10
を介して、ビューモデルのビューに表示されます。私のビューの1つは、これらの値を DataGrid
に表示します。これは非常に反復的であり、変化する要件に適応するための苦痛です。以下よりも良い方法が必要です。
モデル( 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); } }
where MyModel.AnnualizedRate
は
public decimal AnnualizedRate(int i);
ビューモデル( MyViewModel
):
public decimal Rate1 { get { return myModel.AnnualizedRate1; } }
public decimal Rate2 { get { return myModel.AnnualizedRate2; } }
...
public decimal Rate10 { get { return myModel.AnnualizedRate10; } }
表示( 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>
アイデアはありますか?
解決
ObservableCollectionを使用してデータを保存し、グリッドをバインドします。
他のヒント
RBデイビッドソンが言ったことを行うためのコードは次のとおりです。これがあなたが望んだことをすることを見つけたら、彼に信用を与えてください。彼の答えは正しい。
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&lt; AnnualizedRateViewModel&gt;
を ObservableCollection&lt; DataGridColumn&gt;
に変換する値コンバーターを作成する必要があります。 p>
<dg:DataGrid AutoGenerateColumns="false" Columns="{Binding AnnualizedRates, ValueConverter={StaticResource AnnualizedRatesToDataGridColumnCollectionConverter}}">
</dg:DataGrid>
ここで学ぶべきことは、「繰り返し」を自分で考えているときに、「コレクション」を考えてみてください。
幸運...そして、RBデビッドソンを称えます。